在游戏运行时更改文本内容 - Python Arcade 2.4.3

问题描述

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

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

所以我试试这个:

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()

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

解决方法

useEffect(() => { console.log(addtolist); },[addtolist]) 运行循环,在此循环中执行 arcade.run()。如果代码以 on_draw()(每秒帧数)的速度运行,则它每秒执行 25 FPS 25 次。因此,当您单击鼠标时,on_draw() 将文本更改为 on_mouse_release(),稍后 "Clicked!" 将其更改回 on_draw(),最后显示 "Hello world!"

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

setup()
,

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

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()

输出:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.memory.imemorycache.trygetvalue?view=dotnet-plat-ext-5.0