在我的应用程序中,我注意到在我的 CCScene 中可能有些事情看起来不正确。
我只解释 3 件事: 1. 即使我从 UIViewController 执行此操作,我的 FPS 也不会显示在视图中的任何位置(我的 CCLayer 是它自己的类)
我的 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 委托方法也没有被调用:
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 委托方法仍然没有被调用!我现在正在这样做:
self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;
而且我 NSLogged 我的 UIAccelerometer 委托方法,它似乎仍然没有被调用:
- (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 的位置,也许这就是原因。这是未显示的精灵之一的示例:
CGPoint point = CGPointMake(50, 50);
point = [[CCDirector sharedDirector] convertToGL:point];
[sprite setPosition:point];
[self addChild:sprite z:1 tag:1];