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 が 1 つ表示されますが、それだけです。他には何も表示されません。

次に、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. そして最後に、私の CCSprites の 1 つだけが表示されています。私はいくつかのCCSpritesを追加[self addChild:mySprite];していますが、それらは表示されません。それらはすべて b2Bodys にアタッチされており、アニメーション化されているものもありますが、CCSprite が 1 つしか表示されず、なぜそれが唯一のものなのかわかりません。

なぜこれらのことが起こっているのか、誰にも考えがありますか?

編集1:

#1:修正!

#2: 私はそれをやっていますが、まだ機能していません!私はそれをスケジュールするためにこれを行います:

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

これは私の方法です:

    -(void)cocosgameLoop:(ccTime)delta {
    NSLog(@"cocosgameLoop");
}

その NSLog が呼び出されていません。そして、あなたが私に 2 番目の方法を示したとき、それは通常のゲーム ループのように更新されず、メソッドが 1 回だけ呼び出されます。そのメソッドが呼び出されないのはなぜですか?

また、奇妙なことに、私の UIAccelerometer デリゲート メソッドがまだ呼び出されていません。私は今これをやっています:

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

そして、UIAccelerometer デリゲート メソッドを NSLogged しましたが、まだ呼び出されているようには見えません。

- (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 の方法のように CCSprites の位置を設定しています。おそらくそれが理由です。以下は、表示されないスプライトの 1 つの例です。

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 を介して加速度計イベントを受信しようとしています。1つだけ選んでください:

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

また、updateInterval 10/4 = 2.5 … これは、最大で 2.5 秒ごとに加速度計イベントを取得していることを意味します。これは、0.1 以下のように、1 秒未満の数値にする必要があります。


b2Bodies に接続されたスプライトが表示されない場合は、その位置を確認してください。Box2D メーター座標からピクセル座標への変換を忘れていた気がします。スプライトが Box2D ボディに接続されていない場合にスプライトが表示されるかどうかをテストしてみてください。

于 2011-11-17T22:04:06.840 に答える