鱼C论坛

 找回密码
 立即注册
查看: 223|回复: 3

python cocos 关闭火焰不成功

[复制链接]
发表于 2024-12-11 21:31:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设置了两个按钮,一个加上火焰,一个去除火焰。去除火焰为什么不成功?
  1. from cocos.scene import *
  2. from cocos.layer import *
  3. from cocos.particle_systems import *
  4. from cocos.director import *
  5. from cocos.menu import *
  6. f= []
  7. class GameLayer(ColorLayer):
  8.     def __init__(self):
  9.         super(GameLayer, self).__init__(0, 20, 50, 255)

  10. class my_menu(Menu):
  11.     def __init__(self):
  12.         super(my_menu, self).__init__()
  13.         self.font_item['font_size'] = 20
  14.         self.font_item_selected['font_size'] = 26
  15.         item1 = MenuItem('Fire', self.menu_callback1)
  16.         item2 = MenuItem('NoFire', self.menu_callback2)
  17.         x = 100
  18.         y = 50
  19.         self.create_menu([item1,item2], layout_strategy=fixedPositionMenuLayout(
  20.                 [(x, y), (x + 400, y)]))

  21.     def menu_callback1(self):
  22.         global f
  23.         f = Fire()
  24.         f.position = (300, 100)
  25.         self.add(f)

  26.     def menu_callback2(self):
  27.         if f != []:
  28.             self.remove(f)

  29. if __name__ == '__main__':
  30.     director.init()
  31.     main_scence = Scene(GameLayer())
  32.     main_scence.add(my_menu())
  33.     director.run(main_scence)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-12-11 21:32:07 | 显示全部楼层
你在实现“去除火焰”功能时遇到的问题可能与全局变量的使用和初始化有关。以下是一些需要注意的地方,以及修正后的代码:

1. 初始化时,确保 `f` 被设置为 `None` 而不是一个空值。
2. 在 `menu_callback2` 方法中,需要判断 `f` 是否为 `None`,而不是比较 `f` 是否为空。

以下是修正后的代码示例:

  1. from cocos.scene import Scene
  2. from cocos.layer import ColorLayer
  3. from cocos.particle_systems import Fire
  4. from cocos.director import director
  5. from cocos.menu import Menu, MenuItem, fixedPositionMenuLayout

  6. # 初始为 None
  7. f = None

  8. class GameLayer(ColorLayer):
  9.     def __init__(self):
  10.         super(GameLayer, self).__init__(0, 20, 50, 255)

  11. class my_menu(Menu):
  12.     def __init__(self):
  13.         super(my_menu, self).__init__()
  14.         self.font_item = 20
  15.         self.font_item_selected = 26
  16.         item1 = MenuItem('Fire', self.menu_callback1)
  17.         item2 = MenuItem('NoFire', self.menu_callback2)
  18.         self.create_menu([item1, item2], layout_strategy=fixedPositionMenuLayout([(100, 50), (100, 100)]))

  19.     def menu_callback1(self):
  20.         global f
  21.         # 添加火焰特效
  22.         f = Fire()
  23.         f.position = (300, 100)
  24.         self.add(f)

  25.     def menu_callback2(self):
  26.         global f
  27.         # 移除火焰特效
  28.         if f is not None:
  29.             self.remove(f)
  30.             f = None

  31. if __name__ == '__main__':
  32.     director.init()
  33.     main_scene = Scene(GameLayer())
  34.     main_scene.add(my_menu())
  35.     director.run(main_scene)
复制代码


注意到在 `menu_callback2` 中,我们检查 `f` 是否为 `None`。此外,当我们移除 `f` 后,将其重新设置为 `None` 以防止后续误操作。这样应该能解决你去除火焰特效不成功的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-11 21:46:41 | 显示全部楼层
以上代码运行错误:
Traceback (most recent call last):
  File "D:/bcpyqt/game/cocosfirefish01.py", line 41, in <module>
    main_scene.add(my_menu())
  File "D:/bcpyqt/game/cocosfirefish01.py", line 22, in __init__
    self.create_menu([item1, item2], layout_strategy=fixedPositionMenuLayout([(100, 50), (100, 100)]))
  File "F:\python3.8x64\lib\site-packages\cocos\menu.py", line 294, in create_menu
    self._build_items(layout_strategy)
  File "F:\python3.8x64\lib\site-packages\cocos\menu.py", line 224, in _build_items
    self.font_item_selected['anchor_x'] = self.menu_halign
TypeError: 'int' object does not support item assignment
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-11 21:47:03 | 显示全部楼层
ydwb 发表于 2024-12-11 21:46
以上代码运行错误:
Traceback (most recent call la ...


从错误信息来看,问题出在 `create_menu` 方法中。该方法需要传入具体的菜单项列表,但是你遗漏了这一点。

以下是修正建议:

1. 将 `self.create_menu()` 的参数补充完整,应包含菜单项列表。
2. 为了便于理解,将代码中的细节描述得更加清楚。

以下是修正后的代码示例:

  1. from cocos.scene import Scene
  2. from cocos.layer import ColorLayer
  3. from cocos.particle_systems import Fire
  4. from cocos.director import director
  5. from cocos.menu import Menu, MenuItem, fixedPositionMenuLayout

  6. # 全局变量初始化为 None
  7. f = None

  8. class GameLayer(ColorLayer):
  9.     def __init__(self):
  10.         super(GameLayer, self).__init__(0, 20, 50, 255)

  11. class my_menu(Menu):
  12.     def __init__(self):
  13.         super(my_menu, self).__init__()
  14.         self.font_item = 20
  15.         self.font_item_selected = 26
  16.         item1 = MenuItem('Fire', self.menu_callback1)
  17.         item2 = MenuItem('NoFire', self.menu_callback2)
  18.         # 创建菜单时应包含菜单项列表
  19.         self.create_menu([item1, item2], layout_strategy=fixedPositionMenuLayout([(100, 50), (100, 100)]))

  20.     def menu_callback1(self):
  21.         global f
  22.         # 添加火焰特效
  23.         f = Fire()
  24.         f.position = (300, 100)
  25.         self.add(f)

  26.     def menu_callback2(self):
  27.         global f
  28.         # 移除火焰特效
  29.         if f is not None:
  30.             self.remove(f)
  31.             f = None

  32. if __name__ == '__main__':
  33.     director.init()
  34.     main_scene = Scene(GameLayer())
  35.     main_scene.add(my_menu())
  36.     director.run(main_scene)
复制代码


修正点:

- 补全 `create_menu()` 的菜单项列表 `[item1, item2]`。
- 指定 `fixedPositionMenuLayout` 的坐标位置,确保菜单项正确显示。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-18 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表