4

ゲームの最後に「ゲームオーバー」テキストを表示させ、タッチ時にself.stageにaddeventlistenerを追加しました。これに触れると、ゲームの最初の画面をロードするイベント関数を実行する必要があります。ただし、最初の画面では、画面の中央でクリックして、独自のタッチイベントを持つテキストを再生します。

シミュレーターでは、ゲームオーバー画面の画面中央をクリックすると、クリックしてプレイするイベントも自動的に記録され、ゲームが開始されます。

-ゲーム開始時に[selfremoveAllChildren]を使用しているので、クリックしてプレイするイベントハンドラーが固執するとは思いません。また、同じ領域をクリックしてゲームプレイ中にテストしましたが、クリックしてプレイするためのタッチイベントレコードは正しくありませんでした。

編集:

私はこれを回避しましたが、それが最適な解決策であるかどうかはわかりません。

NSTimerを使用して、しばらくしてからoneventtouchを開始しました

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(attachEventToStart:) userInfo:startTextField repeats:NO];

次に、attachEventToStartで:

-(void)attachEventToStart:(NSTimer *)theTimer
{
    SPTextField *startTextField = [theTimer userInfo];
    [startTextField addEventListener:@selector(gameStartOnTouch:) atObject:self forType:SP_EVENT_TYPE_TOUCH];
}

これはうまくいきました、誰かがより良い解決策を持っているなら素晴らしいでしょう

4

2 に答える 2

2

タイマーよりも優れた代替手段を見つけました。

SPTouchPhaseEnded を使用する必要があるため、次の行をイベント コールバックに追加しました。

SPTouch *touchEnded = [[event touchesWithTarget:self andPhase:SPTouchPhaseEnded] anyObject];
if (!touchEnded)
     return;
SOME GAME START CODE HERE...

これで、アクションはタッチ イベントが終了したときにのみ発生するため、次の画面には実行されません。これは、html-JS または Visual Studio に精通している人にとっては、key_up のように機能します。

コールバック パラメータが SPEvent ではなく SPTouchEvent 型であることを確認してください。

ここで答えを見つけました:http://forum.sparrow-framework.org/topic/event-listeners-getting-called-too-fast

于 2011-08-24T04:48:59.007 に答える
1

あなたのビューの正確な構造や実装についてはわかりませんが、あなたのソリューションに代わるものがあると思います。ゲーム開始イベントのタッチに遅延を設定する代わりに、「ゲームオーバー」テキストが表示されているときにそれを無効にしてみませんか? 私の経験では、これは私にとってよりうまく機能し、より自己文書化されています.

于 2011-08-22T14:37:49.070 に答える