python游戏房间_python游戏中的房间/屏幕/菜单控制器的问题:旧房间不会从内存中删除...

我的头撞到了墙上(就像,是的,身体上,在我现在的位置,我正在破坏我的头盖骨)。基本上,我有一个Python/Pygame游戏,有一些典型的游戏“房间”或“屏幕”,例如标题屏幕、高分屏幕和实际的游戏室。当我在不同的房间之间切换时,一些不好的事情发生了:旧的房间(及其各种项目)没有从内存中删除,也没有从我的事件侦听器中删除。不仅如此,而且每次我回到某个房间,我的事件侦听器数量就会增加,内存也会被消耗掉!(例如,如果我在标题屏幕和“游戏室”之间来回切换,事件侦听器的数量和内存使用量就会不断增加。在

主要的问题是所有的事件侦听器都开始累加并真正耗尽CPU。我是Python新手,不知道我在这里做了什么明显的错误,还是什么。在

如果你能帮我,我会非常爱你!在

主.PYclass RoomController(object):

"""Controls which room is currently active (eg Title Screen)"""

def __init__(self, screen, ev_manager):

self.room = None

self.screen = screen

self.ev_manager = ev_manager

self.ev_manager.register_listener(self)

self.room = self.set_room(config.room)

def set_room(self, room_const):

#Unregister old room from ev_manager

if self.room:

self.room.ev_manager.unregister_listener(self.room)

self.room = None

#Set new room based on const

if room_const == config.TITLE_SCREEN:

return rooms.TitleScreen(self.screen, self.ev_manager)

elif room_const == config.GAME_MODE_ROOM:

return rooms.GameModeRoom(self.screen, self.ev_manager)

elif room_const == config.GAME_ROOM:

return rooms.GameRoom(self.screen, self.ev_manager)

elif room_const == config.HIGH_SCORES_ROOM:

return rooms.HighScoresRoom(self.screen, self.ev_manager)

def notify(self, event):

if isinstance(event, ChangeRoomRequest):

if event.game_mode:

config.game_mode = event.game_mode

self.room = self.set_room(event.new_room)

#Run game

def main():

pygame.init()

screen = pygame.display.set_mode(config.screen_size)

ev_manager = EventManager()

spinner = CPUSpinnerController(ev_manager)

room_controller = RoomController(screen, ev_manager)

pygame_event_controller = PyGameEventController(ev_manager)

spinner.run()

事件_经理.PY

^{pr2}$

使用事件管理器的示例类class Timer(object):

def __init__(self, ev_manager, time_left):

self.ev_manager = ev_manager

self.ev_manager.register_listener(self)

self.time_left = time_left

self.paused = False

def __repr__(self):

return str(self.time_left)

def pause(self):

self.paused = True

def unpause(self):

self.paused = False

def notify(self, event):

#Pause Event

if isinstance(event, Pause):

self.pause()

#Unpause Event

elif isinstance(event, Unpause):

self.unpause()

#Second Event

elif isinstance(event, SecondEvent):

if not self.paused:

self.time_left -= 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值