-1

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

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

所以我试试这个:

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

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

4

2 回答 2

0

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

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

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()
于 2021-03-30T17:54:59.323 回答
0

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

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

输出:

在此处输入图像描述

于 2021-03-31T05:56:34.563 回答