【问题标题】:Pygame Checkbox class works locally but not when importedPygame Checkbox 类在本地工作,但在导入时不工作
【发布时间】:2021-09-20 15:52:15
【问题描述】:
import pygame
from stuff_that_works import Square_checkbox
pygame.init()


class MyGame:
    def __init__(self):
        self.gamestate = 'intro_screen'
        self.run = True
        self.SCREEN_WIDTH = 800
        self.SCREEN_HEIGHT = 600
        self.FPS = 30
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((self.SCREEN_WIDTH, self.SCREEN_HEIGHT))
        pygame.display.set_caption('SM4')

    def options_Screen(self, event):
        self.screen.fill(defaults.BLACK)
        checkbox_1 = Square_checkbox(0, 0, self.screen, 30, 30, defaults.RED, defaults.WHITE, 'checkbox_1')
        checkbox_2 = Square_checkbox(40, 0, self.screen, 30, 30, defaults.RED, defaults.WHITE, 'checkbox_2')
        checkbox_3 = Square_checkbox(-100, -140, self.screen, 30, 30, defaults.RED, defaults.WHITE, 'checkbox_3')
        checkbox_4 = Square_checkbox(-100, -110, self.screen, 30, 30, defaults.RED, defaults.WHITE, 'checkbox_4')
        checkbox_5 = Square_checkbox(-100, -80, self.screen, 30, 30, defaults.RED, defaults.WHITE, 'checkbox_5')

        boxes = []
        boxes.append(checkbox_1)
        boxes.append(checkbox_2)

        for box in boxes:
            box.update_checkbox(event)
        for box in boxes:
            box.render_checkbox()

    def main(self):
        while self.run:
            self.clock.tick(self.FPS)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.run = False                    
                
                if self.gamestate == 'options':
                    self.options(event)
                elif self.gamestate == 'intro_screen':
                    self.intro_screen()
            pygame.display.flip()


Edit1:正如 Rabbid76 所提到的,取出有效的部分并添加了游戏循环。

我在 pygame 中创建了一个 Checkbox 类,当在与 pygame 循环相同的文件上运行时它工作正常,但在我导入该类并创建实例时无法按预期工作。

self.active 未在对象上保存或覆盖。

我尝试使用 @property 获得相同的结果。

也尝试过使用global active,但这会更改所有对象,而不仅仅是实例。

谁能帮助我了解正在发生的事情以找到解决方案?

【问题讨论】:

  • 为什么要显示Square_checkbox 类?这段代码工作正常。您需要展示Square_checkbox 的使用方式。
  • 谢谢!我没想到这更重要!
  • 复选框在每一帧中重新创建。因此,所有盒子总是具有初始状态。您必须在应用程序循环之前创建一次复选框。
  • 太棒了,感谢您的帮助!

标签: python class import pygame


【解决方案1】:

正如 Rabbid76 所暗示的,这是因为实例对象的放置不当。

在循环外生成复选框有效。

关闭这个,谢谢!

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2013-10-23
    • 2012-10-31
    • 2014-01-02
    相关资源
    最近更新 更多