ios - 我的 CCScene 行为异常?

标签 ios cocos2d-iphone scene cclayer

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

这是为什么?

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

    [自行调度:@selector(myGameLoop:)];

然后在我的游戏循环中,我对它进行 NSLog,但日志从未显示在控制台中,所以我意识到它没有被调用。

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

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 委托(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/

相关文章:

ios - 有没有一个很好的教程来使用 Storyboard实现 facebook 登录到 ios 应用程序?

ios - super 初始化返回 nil

json - 如何在 iOS 中调用 JSON 方法

objective-c - Cocos2d不显示视网膜图像

iphone - 如何实现一个由左侧图像和右侧文本组成的 UIButton

ios - 滚动浏览 tableView 后,视频在 AVPlayerController 的 UITableView 单元格中停止加载

uiview - 将多个UITapGestureRecognizers添加到单个 View (Cocos2d)

java - JavaFX 中的隐形舞台/场景

Javafx:更改 setOnAction 中的场景

java - 如何在另一个已激活时加载 FXML?