十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用cocos2d制作游戏菜单:内置Menu系统完全指南(含按键事件处理)

如何用cocos2d制作游戏菜单:内置Menu系统完全指南(含按键事件处理) 如何用cocos2d制作游戏菜单内置Menu系统完全指南含按键事件处理【免费下载链接】cocosgraphic library for games and multimedia, for python language on PC-like hardware项目地址: https://gitcode.com/gh_mirrors/coco/cocoscocos2dPython 版内置的Menu系统是制作游戏菜单、设置界面和选项面板的最快方式。它提供 6 种现成菜单项文本、开关、多选、输入框、图片、颜色并自动处理上下键切换、Enter 激活、Esc 退出、鼠标悬停与点击等按键事件还自带缩放、摇晃等动画效果。本文带你从零创建一个可交互的游戏主菜单并深入讲解事件处理机制与布局定制技巧。快速开始10 行代码做出第一个菜单 cocos2d 的核心思路是所有可视对象都是CocosNode的后代菜单本身就是一个Layer你只需继承Menu→ 在__init__里配置样式 → 调用create_menu()→ 把菜单放进Scene交给director运行。菜单源码位于 cocos/menu.py参考示例见 test/test_menu_centered.pyfrom cocos.director import director from cocos.scene import Scene from cocos.menu import Menu, MenuItem, zoom_in, zoom_out class MainMenu(Menu): def __init__(self): super(MainMenu, self).__init__(My Game) # 菜单标题 items [ MenuItem(Start, self.on_start), MenuItem(Options, self.on_options), MenuItem(Quit, self.on_quit), ] # 选中时放大失焦时缩回 self.create_menu(items, selected_effectzoom_in(), unselected_effectzoom_out()) def on_start(self): print(start game!) def on_options(self): print(show options!) def on_quit(self): import pyglet pyglet.app.exit() if __name__ __main__: director.init(resizableTrue) director.run(Scene(MainMenu()))运行后按↑/↓ 切换焦点、Enter 激活、Esc 退出鼠标移动也能切换焦点——这些都不用你写一行代码Menu已经替你处理好了。认识 6 种内置菜单项Menu内部会自动做布局、管理焦点、在焦点变化时播放动画。真正干活的是菜单项全部在 cocos/menu.py 中定义菜单项作用适合场景MenuItem显示文本激活时触发回调开始、退出按钮ToggleMenuItem开关项在 OFF/ON 间切换声音、FPS 显示MultipleMenuItem循环切换一组预设值音量档位、分辨率选择EntryMenuItem文本输入框支持 Backspace 与长度限制玩家昵称ImageMenuItem用一张图片作为按钮美术风格化按钮ColorMenuItem循环选择颜色并实时预览色块自定义配色一个混合使用的例子摘自 test/test_menu_items.pyitems [ ToggleMenuItem(Show FPS: , self.on_show_fps, True), MultipleMenuItem(Resolution: , self.on_resolution, [640x480, 800x600, 1024x768]), EntryMenuItem(Name: , self.on_name, player, max_length8), ImageMenuItem(imagemenuitem.png, self.on_image), ColorMenuItem(Color: , self.on_color, [(255,255,255), (129,255,100), (50,50,100)]), ] self.create_menu(items)按键事件处理机制全解析 ⌨️这是Menu最值钱的内置能力。看 cocos/menu.py 中on_key_press的实现逻辑Esc→ 调用on_quit()退出程序Enter / 小键盘 Enter→ 激活当前焦点项先播放activated_effect再触发该菜单项的on_key_press最终执行你传入的回调函数↑ / ↓→ 移动焦点并且首尾循环第一项再往上会跳到最后一项切换焦点时播放select_sound音效若配置了的话其它按键→ 原样转发给当前焦点的菜单项例如MultipleMenuItem用 ←/→ 循环取值、EntryMenuItem用 Backspace 删字符。鼠标事件同样内置鼠标移动on_mouse_motion→ 检测哪个菜单项被悬停自动切换焦点鼠标松开on_mouse_release→ 若点击落在焦点项的包围盒内就激活该项。菜单项自身基于CocosNode所以每个菜单项天然支持position、scale、rotation等变换属性也能do()动作为后面的样式定制打下基础。布局与样式定制让菜单更好看 三种布局方式默认垂直布局通过menu_halign/menu_valign控制对齐取值CENTER、LEFT、RIGHT、TOP、BOTTOM边距用menu_hmargin/menu_vmargin调整。例如左上角菜单参考 test/test_menu_top_left.pyself.menu_valign TOP self.menu_halign LEFT固定坐标布局用fixedPositionMenuLayout(坐标列表)把每个菜单项放到任意位置适合做不规则的界面排布例如把按钮做成旋转/缩放的趣味样式参考 test/test_menu_fixed_position.py 与 test/test_menu_rotated.pyitem1.rotation 45 # 菜单项是 CocosNode可以自由变换 self.create_menu(items, layout_strategyfixedPositionMenuLayout( [(450, 300), (130, 200), (200, 100), (400, 50)]))字体与标题三个字典控制全部外观在create_menu前修改即可font_title标题文字默认 56 号字font_item普通状态字体默认 32 号、灰色font_item_selected焦点状态字体默认 42 号、白色——焦点项会自动放大变白。内置动画效果菜单模块还导出 4 个现成动画cocos/menu.pyzoom_in()、zoom_out()0.2 秒缩放、shake()轻微抖动、shake_back()回正。把它们传给create_menu的三个效果参数即可self.create_menu(items, selected_effectshake(), unselected_effectshake_back())实战把菜单接入你的游戏 真实项目里菜单是流程的一部分。典型做法主菜单是一个Scene点击「开始」后把场景切换成游戏场景参考 samples/hello_world.py 的场景创建方式class GameScene(Scene): def __init__(self): Scene.__init__(self) # ... 添加你的游戏层、精灵、标签 ... class MainMenu(Menu): def __init__(self): super(MainMenu, self).__init__(cocos2d Game) items [MenuItem(Start, self.on_start), MenuItem(Quit, self.on_quit)] self.create_menu(items, zoom_in(), zoom_out()) def on_start(self): director.push(GameScene()) # 切换到游戏场景 def on_quit(self): import pyglet pyglet.app.exit()两个进阶提示多层级菜单由于Menu本质是Layer可以像 cocosnodes.txt 中描述的MultiplexLayer那样在同一个场景里只显示其中一个菜单层实现「主菜单 / 设置菜单 / 关卡选择」的自由切换场景切换时加转场用cocos.scenes.transitions里的现成转场类淡入、滑动、翻转等让菜单和游戏之间的切换更加顺滑。总结cocos2d 的Menu系统把游戏菜单最繁琐的部分——布局、焦点导航、按键与鼠标事件、选中动画——全部内置好了继承Menu用create_menu()组装菜单项几十行代码就能上线6 种菜单项覆盖文本、开关、多值、输入、图片、颜色需求↑↓/Enter/Esc/鼠标 事件自动处理回调函数即你的业务逻辑对齐常量、固定坐标布局、字体字典和 4 个内置动画足以应对绝大多数界面风格。动手建议先跑通 test/test_menu_centered.py 感受默认效果再对照 test/test_menu_items.py 把所有菜单项试一遍最后按本文实战小节把菜单接入你自己的场景。【免费下载链接】cocosgraphic library for games and multimedia, for python language on PC-like hardware项目地址: https://gitcode.com/gh_mirrors/coco/cocos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表