如何在 cocos2d 环境之外实现 cocos2d 游戏的虚拟摇杆?

Posted

技术标签:

【中文标题】如何在 cocos2d 环境之外实现 cocos2d 游戏的虚拟摇杆?【英文标题】:How can I implement a virtual joystick for a cocos2d game outside the cocos2d environment? 【发布时间】:2011-05-29 07:22:44 【问题描述】:

我正在开发一个使用 cocos2d 并且需要虚拟操纵杆的 iPad 游戏。我使用 SneakyJoystick 建立并运行了一个原型。

但是,我意识到我的游戏设计需要我使用 CCTransitions 在 CCScene 的不同实例之间移动用户以获得我想要的视觉效果。问题是,我不希望用户控件(如操纵杆)受到 CCTransitions 的影响——我希望它们保留在屏幕上(在屏幕的不同部分,而不是 CCScene 占据的部分。)

我意识到做到这一点的唯一方法是将整个 cocos2d 环境保持在一个 EAGLView 中,它占据的区域小于整个屏幕,这使我可以将所有用户控件保留在屏幕上的其他位置,它们不受场景转换。

问题是,这意味着 SneakyJoystick 可能不再是一个选项,因为它是一个 CCNode,因此可能只能在 cocos2d 场景图中运行。

我很好奇是否有人对这种情况有替代解决方案:一种在 cocos2d 环境之外实现虚拟操纵杆的方法,但它可以以某种方式与 cocos2d 场景流畅地通信。

如果我可以保留 SneakyJoystick 的功能或其他类似的功能,那就太好了,方法是从这个非 cocos2d 类中利用 cocos2d 的预定更新,或者以其他方式将用户输入信息从 joystick 类推送到 cocos2d。

【问题讨论】:

我现在正面临着这个挑战。您可以尝试交换图层而不是场景,然后您就不必担心了。或者,您可以使用 UIKit 控件实现自己的操纵杆。至于在班级之间共享信息,您可以使用NSNotificationsdefaultNotificationCenter。只需将操纵杆数据传递为userInfo 根据我的阅读,CCTransitions 似乎只能应用于整个 CCScenes 而不是单个 CCLayers... 我不认为过渡可以应用于图层。但是,根据您的游戏,这可能不是必需的。 【参考方案1】:

您可以创建一个 UIView 并将其放在 opengl 视图上。要访问 openglView,请使用 [CCDirector sharedDirector].openGLView。使用 UIView 创建您的游戏杆。所以它会一直显示,并且不受 CCScene 过渡的影响。

【讨论】:

以上是关于如何在 cocos2d 环境之外实现 cocos2d 游戏的虚拟摇杆?的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2d 应用程序可在除 iPhone 4(任何操作系统)之外的所有设备上运行,CCBatchnode 在 addchild 后仅显示黑屏

如何优化cocos2d程序的内存使用和程序大小

如何在 cocos2d 中创建色相(饱和度)选择器

cocos2d如何分割大图,使其显示在cocos2d中

关于windows下创建cocos2d lua工程 无法断点调试 relative (file not exist) 的问题

如何在 Cocos2d CCLayer 中添加摇动手势?