【问题标题】:Change the content of the text while the Game is running - Python Arcade 2.4.3在游戏运行时更改文本内容 - Python Arcade 2.4.3
【发布时间】:2021-06-26 16:29:04
【问题描述】:

我正在寻找一种在游戏运行时更改渲染文本的方法。

我发现有人说只需更改文本变量即可。

所以我试试这个:

import arcade

WINDOW = {"width":800, "height": 600, "title": ""}

class MyGame(arcade.Window):
    """
    Main application class.
    """

    def __init__(self):

        # Call the parent class and set up the window
        super().__init__(WINDOW['width'], WINDOW['height'], WINDOW['title'])

        arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)

    def setup(self):
        """ Set up the game here. Call this function to restart the game. """
        pass

    def on_draw(self):
        """ Render the screen. """

        arcade.start_render()
        # Code to draw the screen goes here

        self.text = "Hello world!"
        arcade.draw_text(self.text, WINDOW['width'] / 3 + (WINDOW['width'] / 3 / 3) - 20, WINDOW['height'] / 2, arcade.csscolor.WHITE, 18)
    
    def on_mouse_release(self, x, y, button, key_modifiers):
        print("Clicked!")
        self.text = "Clicked!"

def main():
    """ Main method """
    window = MyGame()
    window.setup()
    arcade.run()


if __name__ == "__main__":
    main()

但是,文本没有改变,但它可以检测到点击。

【问题讨论】:

  • on_draw()self.text 设置为"Hello world!",因此您在on_mouse_release() 中所做的任何更改都将被丢弃。
  • 正如@PranavHosangadi 已经说过的那样-您不应该将self.text = "Hello world!" 放在on_draw() 中,而应放在__init__ 中。这样它只会在开始时设置"Hello world!"。稍后按钮会将其更改为"Clicked!"。您必须记住 arcade.run() 运行循环,它在每个循环中执行 on_draw()

标签: python python-3.x text-rendering arcade


【解决方案1】:

以下是在鼠标单击时更改文本的简短示例:

import arcade

class Game(arcade.Window):
    def __init__(self):
        super().__init__(400, 300)
        self.text = 'Waiting for click!'

    def on_draw(self):
        arcade.start_render()
        arcade.draw_text(self.text, 200, 150, arcade.color.RED, 18, anchor_x='center')

    def on_mouse_release(self, x, y, button, key_modifiers):
        self.text = 'Clicked!'

Game()
arcade.run()

输出:

【讨论】:

    【解决方案2】:

    arcade.run() 运行循环,在此循环中执行on_draw()。如果代码以25 FPS(每秒帧数)的速度运行,那么它每秒执行on_draw() 25 次。因此,当您单击鼠标时,on_mouse_release() 将文本更改为"Clicked!",然后on_draw() 将其更改回"Hello world!",最后显示"Hello world!"

    您应该在__init__() 中使用self.text = "Hello world!" 或(更好)在setup() 中仅设置一次。

    import arcade
    
    WINDOW = {"width":800, "height": 600, "title": ""}
    
    class MyGame(arcade.Window):
        """
        Main application class.
        """
    
        def __init__(self):
    
            # Call the parent class and set up the window
            super().__init__(WINDOW['width'], WINDOW['height'], WINDOW['title'])
    
            arcade.set_background_color(arcade.csscolor.CORNFLOWER_BLUE)
    
        def setup(self):
            """ Set up the game here. Call this function to restart the game. """
            
            self.text = "Hello world!"
    
        def on_draw(self):
            """ Render the screen. """
    
            arcade.start_render()
            # Code to draw the screen goes here
    
            arcade.draw_text(self.text, WINDOW['width'] / 3 + (WINDOW['width'] / 3 / 3) - 20, WINDOW['height'] / 2, arcade.csscolor.WHITE, 18)
        
        def on_mouse_release(self, x, y, button, key_modifiers):
            print("Clicked!")
            self.text = "Clicked!"
    
    def main():
        """ Main method """
        window = MyGame()
        window.setup()
        arcade.run()
    
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多