【发布时间】: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