2

Cocos2Dで作成したアプリがいくつかあります。

それらのいくつかをCocos2Dの新しいリリース2.0にアップグレードしています。私が使用している方法は次のとおりです。

  1. 標準テンプレートから新しい空白のプロジェクトを作成します
  2. すべてのファイルを新しいプロジェクトに移動します

私は通常、Helloworldレイヤーを最初のレイヤーとして保持します。Cocos2Dが最初のintroLayerとしてintroLayerを作成することに気づきました。それを削除し、以前と同じようにHelloworldをロードする動作に戻しました。そうは言っても、私はいくつかのことに気づきました。

  1. Helloworldのinitメソッド内の動作が異なります。initメソッド内で方向が正しく報告されないことに気づきました。アプリが横向きの場合でも、常に縦向きとして報告されます。私が気付いたのは、ディレクターがまだ完全に初期化されていないようだということです。これは、監督の見解を使おうとすると確認されました。このビューは、Helloworldのinitメソッド内で使用しようとすると、常に無効になります。

これを解決するために、すべてのコードをHelloworldのonEnterメソッドに移動しました。これで、Helloworldとディレクターが完全に初期化され、すべてが機能します。

この方法は、Cocos2D 1.0から2.0にアップグレードした最初のアプリでは機能しましたが、現在Cocos2D2.0betaから2.0finalに変換しているアプリケーションに問題があります。

私が今抱えている問題は、Helloworldがタッチをトリガーしていないことです。そうです、私はこれを実行しています。

-(void) registerWithTouchDispatcher
{
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}


- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    return YES;
}

Helloworldが2.0でタッチを検出するのを妨げているのは何ですか?Helloworldのinitメソッドを2.0ベータまたは1.0のように動作させるにはどうすればよいですか?

注:Helloworldのロード時に、ccTouchBeganとregisterWithTouchDispatcherが呼び出されることはありません。

ありがとう。

4

2 に答える 2

3

ローテーションの問題は既知のバグです。アプリが横向きのみに設定されている場合でも、最初のシーンは縦向きモードで初期化されます。これは、アプリデリゲートによって方向が更新される前に初期化が行われるためです。コードをonEnterに入れると、それが修正されます。または、単に「イントロ」シーンをロードしてから、実際の最初のシーンをロードすると、それも修正されます。

タッチの問題はおそらくcocos2d2.0の問題ではありません。多分それは設定しないのと同じくらい簡単ですself.isTouchEnabled = YES。registerWithTouchDispatcherメソッドが呼び出されない場合、isTouchEnabledがYESに設定されていないか、CCLayerクラスではなくCCSceneでこれを行っています。

于 2012-07-31T19:55:24.563 に答える
0

この質問の解決策は、onEnterメソッドに[superonEnter]を配置することです。

-(void) onEnter {
    [super onEnter];
    self.isTouchEnabled = YES;
}

この行がないため、スケジューラーが機能しない、ccMoveの奇妙な動作、ccTransitionがonEnterTransitionDidFinishをトリガーしない、あらゆる種類の問題など、アプリケーションにあらゆる種類の問題が発生していました。

于 2012-07-31T21:41:55.053 に答える