0

在我的应用程序中,我注意到在我的 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;
}

为什么是这样?

  1. 我的游戏循环没有被调用。我正在这样做:

    [自我计划:@selector(myGameLoop:)];

然后在我的游戏循环中我 NSLog 它并且日志永远不会显示在控制台中,所以我意识到它没有被调用。

另一件奇怪的事情是,即使我这样做,我的 UIAccelerometer 委托方法也没有被调用:

self.isAccelerometerEnabled = YES;
    [UIAccelerometer sharedAccelerometer].delegate = self;
    [UIAccelerometer sharedAccelerometer].updateInterval = 0.10f/4.0f;

有什么理由吗?

  1. 最后,只有我的一个 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];
4

1 回答 1

2

缺少 FPS 显示:您需要将“fps_images.png”添加到您的项目中。


如果您安排此选择器:

[self schedule:@selector(myGameLoop:)];

确保方法实现如下:

-(void) myGameLoop:(ccTime)delta
{
}

标准方法是调用

[self scheduleSelector];

并实施:

-(void) update:(ccTime)delta
{
}

它也快了一点。

此外,使用断点来测试是否调用了一行代码。如果您尚未了解 Xcode 调试,请阅读本指南。


通过启用加速度计并设置 UIAccelerometer 委托,您将尝试通过 Cocos2D 和 UIAccelerometer 接收加速度计事件。只选一个:

self.isAccelerometerEnabled = YES;
[UIAccelerometer sharedAccelerometer].updateInterval = 1/30.0f;

此外,updateInterval 10/4 = 2.5 … 这意味着您最多每 2.5 秒就会收到加速度计事件。您将希望这是一个不到一秒的数字,例如 0.1 或更小。


如果附加到 b2Bodies 的 sprite 不可见,请检查它们的位置。我有一种预感,您忘记将 Box2D 仪表坐标转换为像素坐标。如果精灵没有连接到 Box2D 主体,请尝试测试它们是否出现。

于 2011-11-17T22:04:06.840 回答