如何从 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];}

请注意我把它改回实例方法又是实例变量的所有变量。



原创粉丝点击