在我的应用程序中,我注意到在我的 CCScene 中可能有些事情看起来不对。
我只解释三件事: 1. 即使我从我的 UIViewController 执行此操作(我的 CCLayer 是它自己的类),我的 FPS 也没有显示在 View 中的任何地方
我的 CCLayer 类的 .h 看起来像这样:
@interface CCMyGame : CCLayer {
CCDirector* director = [CCDirector sharedDirector];
[CCDirector setDirectorType:kCCDirectorTypeDisplayLink];
[director setAnimationInterval:1.0/60];
[director setOpenGLView:self.eaglView];
[director setDisplayFPS:YES];
[director runWithScene:[CCSceneGame scene]];
我看到了我的一个 CCSprite,仅此而已,我没有看到其他任何东西。
然后在我的 CCLayer 类中,我这样做以完全激活 CCScene:
+(CCScene *) scene
{
CCScene *scene = [CCScene node];
CCSceneGame *layer = [CCSceneGame node];
[scene addChild:layer];
return scene;
}
这是为什么?
我的游戏循环没有被调用。 我这样做:
[自行调度:@selector(myGameLoop:)];
然后在我的游戏循环中,我对它进行 NSLog,但日志从未显示在控制台中,所以我意识到它没有被调用。
另外一件奇怪的事情是,即使我这样做,我的 UIAccelerometer 委托(delegate)方法也没有被调用:
self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].delegate = self;
[UIAccelerometer sharedAccelerometer].updateInterval = 0.10f/4.0f;
有什么原因吗?
- 最后,除了我的一个 CCSprite 之外,没有显示。
我添加了一些 CCSprite,如
[self addChild:mySprite];
但我没有看到它们。它们都附加到 b2Bodys,有些是动画的,但我只看到一个 CCSprite,我不确定为什么这是我唯一看到的。
有没有人知道为什么会发生这些事情?
编辑1:
#1:已修复!
#2: 我正在这样做,但仍然无法正常工作! 我这样做是为了安排它:
[self schedule:@selector(cocosgameLoop:)];
这是我的方法:
-(void)cocosgameLoop:(ccTime)delta {
NSLog(@"cocosgameLoop");
}
NSLog 没有被调用。当你向我展示第二种方式时,它不会像游戏循环通常那样获得更新,只会调用一次方法。 为什么没有调用该方法?
同样奇怪的是,我的 UIAccelerometer 委托(delegate)方法仍然没有被调用! 我现在这样做:
self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;
我 NSLogged 我的 UIAccelerometer 委托(delegate)方法,它似乎仍然没有被调用:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
NSLog(@"accelerometer");
}
Edit2:现在看来,如果我这样做,我的 UIAccelerometer 方法会被调用:
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1/60];
为什么会这样?我想我在某处读到我的层没有添加到我的层次结构中,是这样吗?我从这里得到了这个想法,也许这就是所有这些问题发生的原因:http://www.cocos2d-iphone.org/forum/topic/13988
#3: 我的 CCSprite 没有跟随 b2Body,而是相反。你在这里给了我那个代码:b2Body Animation?
我正在像 UIKit 一样设置我的 CCSprite 的位置,也许这就是原因。这是未显示的 Sprite 之一的示例:
CGPoint point = CGPointMake(50, 50);
point = [[CCDirector sharedDirector] convertToGL:point];
[sprite setPosition:point];
[self addChild:sprite z:1 tag:1];
最佳答案
缺少 FPS 显示:您需要将“fps_images.png”添加到您的项目中。
如果您安排此选择器:
[self schedule:@selector(myGameLoop:)];
确保方法实现如下:
-(void) myGameLoop:(ccTime)delta
{
}
标准的方法是调用
[self scheduleSelector];
并实现:
-(void) update:(ccTime)delta
{
}
它也快了一点点。
此外,使用断点来测试一行代码是否被调用。如果您还没有去过,请阅读本指南 introduced to Xcode debugging .
通过启用加速度计并设置 UIAccelerometer 委托(delegate),您将尝试通过 Cocos2D 和 UIAccelerometer 接收加速度计事件。只选一个:
self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;
此外,updateInterval 10/4 = 2.5 ……这意味着您最多每 2.5 秒获取一次加速度计事件。您会希望它是一个小于一秒的数字,例如 0.1 或更小。
如果附加到 b2Bodies 的 Sprite 不可见,请检查它们的位置。我有一种预感,您忘记了将 Box2D 仪表坐标转换为像素坐标。如果 Sprite 未连接到 Box2D 主体,请尝试测试 Sprite 是否会出现。
关于ios - 我的 CCScene 行为异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174425/