在我的应用程序中,我注意到在我的CCScene中可能存在一些似乎不正确的事情。
我只是解释三件事: 1.即使我从我的UIViewController(我的CCLayer是它自己的类)执行此操作,我的FPS也不会显示在视图中的任何位置
我的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;
有什么原因吗?
[self addChild:mySprite];
但我没有看到它们。它们都附属于b2Bodys,有些是动画,但我只看到一个CCSprite,我不知道为什么这是我唯一看到的。有没有人知道为什么会发生这些事情?
EDIT1:
#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:我的CCSprites没有关注b2Body,相反,它是另一种方式。你在这里给了我这段代码:b2Body Animation?
我正在设置我的CCSprites的位置,就像UIKit一样,也许这就是原因。这是一个未显示的精灵的例子:
CGPoint point = CGPointMake(50, 50);
point = [[CCDirector sharedDirector] convertToGL:point];
[sprite setPosition:point];
[self addChild:sprite z:1 tag:1];
答案 0 :(得分:2)
缺少FPS显示:您需要将“fps_images.png”添加到项目中。
如果您安排此选择器:
[self schedule:@selector(myGameLoop:)];
确保方法实现如下:
-(void) myGameLoop:(ccTime)delta
{
}
标准方法是打电话
[self scheduleSelector];
并实施:
-(void) update:(ccTime)delta
{
}
它也有点快。
此外,使用断点来测试是否调用了一行代码。如果您还没有introduced to Xcode debugging,请阅读本指南。
通过启用加速度计并设置UIAccelerometer代表,您尝试通过Cocos2D和UIAccelerometer接收加速度计事件。只选一个:
self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;
此外,updateInterval 10/4 = 2.5 ...这意味着您最多每2.5秒获得一次加速度计事件。你会希望这是一个只有0.1秒或更短时间的数字。
如果看不到附在b2Bodies上的精灵,请检查它们的位置。我有一种预感,你忘了从Box2D仪表坐标转换为像素坐标。如果精灵没有连接到Box2D身体,则尝试进行测试。