|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
以下代码意在点击图片后去除该图片及右侧图片,并更新字典。
raise Exception("Child not found: %s" % str(child))
Exception: Child not found: <cocos.sprite.Sprite object at 0x000000000636DFD0>
- import cocos
- from cocos.scene import Scene
- from cocos.director import director
- import pyglet
- class GameLayer(cocos.layer.ColorLayer):
- def __init__(self):
- super().__init__(128, 128, 128, 128)
- cocos.layer.Layer.is_event_handler = True
- self.blocks = {}
- for i in range(18):
- bo = cocos.sprite.Sprite('block.png')
- bo.position = 40+32*i, 240
- self.blocks[i]=bo
- self.add(self.blocks[i])
- print(self.blocks)
- print(len(self.blocks))
- def on_mouse_press(self, x, y, button, modifiers):
- if button == pyglet.window.mouse.LEFT:
- x=round((x-40)/32)
- y=round((y-240)/240)
- print('x=',x)
- for key in self.blocks:
- if key>=x:
- self.remove(self.blocks[key])
- for key in self.blocks:
- if key>=x:
- self.blocks.pop(key)
- print(self.blocks)
- print(len(self.blocks))
- def main():
- director.init()
- scene = Scene()
- scene.add(GameLayer(), z=0)
- director.run(scene)
- if __name__ == "__main__":
- main()
复制代码
问题出在代码中对`self.blocks`的处理上。`self.blocks`被定义为一个字典,但在循环中被赋值为一个`Sprite`对象,这会导致后续的字典操作失败。以下是一些建议来修复这个问题:
1. 确保`self.blocks`是一个字典,并且每个`Sprite`对象都被正确地添加到字典中。
2. 在`on_mouse_press`方法中,确保在移除`Sprite`对象时,字典的键和值都被正确处理。
以下是修正后的代码片段:
- import cocos
- from cocos.scene import Scene
- from cocos.director import director
- import pyglet
- class GameLayer(cocos.layer.ColorLayer):
- def __init__(self):
- super().__init__(128, 128, 128, 128)
- cocos.layer.Layer.is_event_handler = True
- self.blocks = {}
- for i in range(18):
- bo = cocos.sprite.Sprite('block.png')
- bo.position = 40 + 32 * i, 240
- self.blocks[i] = bo # 使用字典存储Sprite对象
- self.add(bo)
- print(self.blocks)
- print(len(self.blocks))
- def on_mouse_press(self, x, y, button, modifiers):
- if button == pyglet.window.mouse.LEFT:
- x = round((x - 40) / 32)
- y = round((y - 240) / 240)
- print('x=', x)
- keys_to_remove = [key for key in self.blocks if key >= x]
- for key in keys_to_remove:
- self.remove(self.blocks[key])
- del self.blocks[key]
- print(self.blocks)
- print(len(self.blocks))
- def main():
- director.init()
- scene = Scene()
- scene.add(GameLayer(), z=0)
- director.run(scene)
- if __name__ == "__main__":
- main()
复制代码
在这个修正中,`self.blocks`被正确地初始化为一个字典,并且每个`Sprite`对象都被存储在字典中。`on_mouse_press`方法中,使用列表推导式来收集需要移除的键,然后在循环中移除这些键对应的`Sprite`对象。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|