如何从 appdelegate.mm helloworldlayer.mm 中调用一个方法
来源:互联网 发布:qq网络诈骗案例分析 编辑:程序博客网 时间:2024/05/22 15:23
http://www.d2100.com/questions/49095
我在做我第一次使用 cocos2d 和 box2d 的 iphone 游戏。我只被实施暂停按钮。它弹出暂停菜单顶部的游戏,并暂停 CCDirector。暂停和中能够很好的只要你呆在这款应用程序,但有 bug。如果您尽量减少 app,虽然它已暂停和再次来返回到该游戏是项未中止,但暂停菜单是仍在它的前面。原因似乎是在 AppDelegate.mm 的 applicationDidBecomeActive 方法如下所示:
- (void)applicationDidBecomeActive:(UIApplication *)application { [[CCDirector sharedDirector] resume];}
我只改变"恢复""暂停",但游戏然后启动中的每个实例将暂停。
所以我猜想解决方案是将代码添加到此方法删除暂停层或 (更好的) 暂停处长,请确保暂停层是在的地方,所以游戏汽车-暂停在任何情况下如果一个球员离去,回来。麻烦的是,我真正的新目标 c,找不出如何在我的 helloworldlayer 中创建一个公共方法和从 AppDelegate 中调用它。任何人都可以给我如何执行此操作简单解释的一下吗?我尝试以下内容:
- (void)applicationDidBecomeActive:(UIApplication *)application { [[CCDirector sharedDirector] pause]; [HelloWorldLayer pause];}
然后将下面的代码添加到我的 HelloWorldLayer.mm:
+(void)pauseGame { _paused = YES; _pauseMenu.visible = YES; _pauseLayer.visible = YES; [[CCDirector sharedDirector] pause]; }
但它给了我的错误 — — 它说"实例变量 _paused 中的类方法访问",和其他两行代码为类似的错误。
如何解决此问题?我尝试使三个变量的属性和合成他们,但这并没有帮助。红色感叹号被替换为黄色三角形 (具有相同的警告)。但是,该程序仍崩溃在该点在代码中。
感谢你的帮助 !
-詹姆斯
<strong> 编辑: 宇 !我终于懂了! <\/strong>
我的问题是不能实现,+ 方法应用到类,而不是实例,并因此不能访问的特定实例的变量。因为这是我所需要做的寻找 appDelegate 和特定的 Cocos2D 层之间进行通信的方式。本教程证明是非常有用的:
http://www.cocos2d-iphone.org/forum/topic/9354
以下是我最终还是用的代码: appDelegate.mm,在我将取代 applicationDidFinishLaunching 方法的结尾通过下列行:
// Run the intro SceneCCLayer *layer = [HelloWorldLayer node]; //create and init layerCCScene *scene = [CCScene node]; //create and init parent and empty scene[scene addChild:layer z:0 tag:100]; //TAG EACH LAYER WITH A UNIQUE NUMBER!!![[CCDirector sharedDirector] runWithScene: scene];
然后我 applicationDidResignActive 添加以下内容:
- (void)applicationWillResignActive:(UIApplication *)application { [[CCDirector sharedDirector] pause]; CCScene * scene = [[CCDirector sharedDirector] runningScene]; id layer = [scene getChildByTag:100]; [layer pauseGame];}
我删除了默认值,并中止暂停功能从 applicationDidBecomeActive,因为我想要留暂停并加载了暂停屏幕。
最后,在 HelloWorldLayer.mm 中我恢复功能,它原本是:
-(void)pauseGame { _paused = YES; _pauseMenu.visible = YES; _pauseLayer.visible = YES; [[CCDirector sharedDirector] pause];}
请注意我把它改回实例方法又是实例变量的所有变量。
- 如何从 appdelegate.mm helloworldlayer.mm 中调用一个方法
- mm
- MM
- MM
- MM
- mm
- mm
- mm
- MM
- mm
- mm
- mm
- MM
- mm
- MM
- mm
- mm
- MM
- 调制解调笔记
- COCOS2D-X Lua 面向对象编程
- 实例二:Ajax返回Json在Java中的实现
- 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门(TI达芬奇双核开发资料 [ .
- 数据结构 二叉树及中序、先序和后序输出
- 如何从 appdelegate.mm helloworldlayer.mm 中调用一个方法
- LoadRunner下DLL的调用
- 如何在windows上把你的项目提交到github
- C6000系列DSP的EMIFA接口 .
- LRM-00101: unknown parameter name 'location' LRM-00101: unknown parameter name 'valid_for' 粗心引起问题一例
- Ubuntu 12.04 部署 Git build Server
- Protection 1
- Flex应用程序的系统开发周期
- C6000系列DSP的中断系统