【iOS-Cocos 2 dゲーム開発の5】【1】マルチコンタクトとタッチスクリーンイベントの詳細(単一リスニング、イベント配信)
当駅の文章はすべて 李華明Himi オリジナル、転載は必ず明らかなところに明記してください.
黒米GameDev街より転載 テキストリンク: http://www.himigame.com/iphone-cocos2d/450.html
ここ数日ずっとcocos 2 dをかじって、多くのものを消化して、基本的に手書き会社のゲームを把握することができます;では、今日はいくつかのポイントを出して経験を分かち合い、新しい子供靴たちに参考にします.
この記事では、cococos 2 dがユーザーのタッチスクリーンのリスニングイベントを詳しく紹介します(cocos 2 dには詳細な文章やチュートリアルがたくさんありますが、私はここでは自分の理解から言っただけです)
本題に入ります:全体cocos 2 dからタッチスクリーンに対するイベントの傍受は2種類に分けることができます:
1.単一傍受、いわゆる単一傍受は実はcococos 2 dエンジンフレームワークと関係があります.cococos 2 dでは各ゲームインタフェースで1つのCCLayoutを使用して完成することができるので、1つのCCLayoutが画面に表示された後、ユーザーのボタンイベントを傍受したい場合は、一般的に以下の形式で傍受することができます:(注意:ここではCCLayout類が傍受する方式です)
まず、リスニングを開始します.
次に、リスニング関数を書き換えます.
このような傍受はひどいeazyですが、ここではCCLayoutクラスに対する傍受方式であることに注意してください.
2.配布を傍受する;さっき言ったように、ゲームの各インタフェースはCCLayoutかもしれませんが、CCSpriteの精霊の主役を単独で傍受したい場合、あるいはCCLayoutに精霊がたくさんいる場合、その中の1つを単独で傍受したい場合は、傍受配布の形式を使用する必要があります.
クラスXX継承CCSpriteをカスタマイズし、YYクラスもCCSpriteを継承し、XXタイプとYYクラスのインスタンスが1つのLayout上に存在すると仮定すると、私はXXとYYタイプをそれぞれ単独で傍受したいと思います.まず、現在継承されているCCSpriteクラスのXXをYYクラスでプロトコルを使用します.
(CCSpriteにself.isTouchEnabled=YESはありません.この関数、直接書かないでくださいね~)
コードは次のとおりです.
次に、現在のインプリメンテーションクラスで関数を書き換えます.
(この関数は登録リスニングです.何も書かない場合は、現在タッチスクリーンイベントに対応しません.)
タッチした各イベント関数を書き換えると、次のようになります.
このリスニング方式は、様々なリスニング関数が第1のものと類似しているほか、ccTouchBeganの関数には戻りタイプであるブール値があることがわかります.では、その役割について詳しく説明します.XXクラスとYYクラスの両方が第2のリスニング方式を実現した場合、ユーザがスクリーンにタッチした後、(現在ユーザがトリガしているのはXXクラスとYYクラスのインスタンスが存在するCCLayoutである)まずXXまたはYYのccTouchBegan関数に入り、ここではまずXXクラスに入ったと仮定すると、XXクラスのccTouchBeganは応答され、return true;ユーザタッチスクリーンのメッセージをYYクラスに転送して応答しないことを示し、すなわちYYクラスのccTouchBegan関数に応答しない場合、return false;現在のタッチスクリーン情報は、登録されている他のタイプに渡されます.
一言で言えば、returnの値は、本物であれば、ユーザーがイベントをタッチして処理されたことを示し、他のリスニングは行われません.偽物であれば、他の登録されたタイプに処理を渡し続けます.
では、第2の傍受方式が一般的に使われており、処理が容易であるため、登録については、一般的には onEnter関数;onEnter関数は、各CCScene間の切り替えに応答する関数であり、CCSceneのライフサイクル関数に相当し、具体的な呼び出し順序は以下の通りである.
黒米GameDev街より転載 テキストリンク: http://www.himigame.com/iphone-cocos2d/450.html
ここ数日ずっとcocos 2 dをかじって、多くのものを消化して、基本的に手書き会社のゲームを把握することができます;では、今日はいくつかのポイントを出して経験を分かち合い、新しい子供靴たちに参考にします.
この記事では、cococos 2 dがユーザーのタッチスクリーンのリスニングイベントを詳しく紹介します(cocos 2 dには詳細な文章やチュートリアルがたくさんありますが、私はここでは自分の理解から言っただけです)
本題に入ります:全体cocos 2 dからタッチスクリーンに対するイベントの傍受は2種類に分けることができます:
1.単一傍受、いわゆる単一傍受は実はcococos 2 dエンジンフレームワークと関係があります.cococos 2 dでは各ゲームインタフェースで1つのCCLayoutを使用して完成することができるので、1つのCCLayoutが画面に表示された後、ユーザーのボタンイベントを傍受したい場合は、一般的に以下の形式で傍受することができます:(注意:ここではCCLayout類が傍受する方式です)
まず、リスニングを開始します.
- self.isTouchEnabled=YES;
次に、リスニング関数を書き換えます.
- //
- - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- }
- // -
- - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- {
-
- }
- // -
- -(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- {
-
- }
このような傍受はひどいeazyですが、ここではCCLayoutクラスに対する傍受方式であることに注意してください.
2.配布を傍受する;さっき言ったように、ゲームの各インタフェースはCCLayoutかもしれませんが、CCSpriteの精霊の主役を単独で傍受したい場合、あるいはCCLayoutに精霊がたくさんいる場合、その中の1つを単独で傍受したい場合は、傍受配布の形式を使用する必要があります.
クラスXX継承CCSpriteをカスタマイズし、YYクラスもCCSpriteを継承し、XXタイプとYYクラスのインスタンスが1つのLayout上に存在すると仮定すると、私はXXとYYタイプをそれぞれ単独で傍受したいと思います.まず、現在継承されているCCSpriteクラスのXXをYYクラスで
(CCSpriteにself.isTouchEnabled=YESはありません.この関数、直接書かないでくださいね~)
コードは次のとおりです.
- @interface XX : CCSprite <CCTargetedTouchDelegate>{
-
- }
次に、現在のインプリメンテーションクラスで関数を書き換えます.
- -(void) registerWithTouchDispatcher
- {
- [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
- }
(この関数は登録リスニングです.何も書かない場合は、現在タッチスクリーンイベントに対応しません.)
タッチした各イベント関数を書き換えると、次のようになります.
- //
- - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
- {
- return NO;
- }
- //
- - (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
- {
- }
- //
- - (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
- {
-
- }
- // [CCDirector replaceScene:XX], , 3
- // :
- //1.othterScene +(id)Scene——>
- //2.otherScene init——>
- //3.otherScene onEnter——>
- //4.
- //5. Scene onExit ——>
- //6.otherLayout onEnterTransitionDidFinish()
- //7. Scene dealoc
- -(void) onEnter{
- // Scene init
- // CCTransitionScene,
- //( super onEnter )
- [super onEnter];
- }
- -(void) onEnterTransitionDidFinish{
- // onEnter
- // CCTransitionScene,
- [super onEnterTransitionDidFinish];
- }
- -(void)onExit{
- // dealloc ;
- // CCTransitionScene,
- //( super onExit, )
- [super onExit];
- }
このリスニング方式は、様々なリスニング関数が第1のものと類似しているほか、ccTouchBeganの関数には戻りタイプであるブール値があることがわかります.では、その役割について詳しく説明します.XXクラスとYYクラスの両方が第2のリスニング方式を実現した場合、ユーザがスクリーンにタッチした後、(現在ユーザがトリガしているのはXXクラスとYYクラスのインスタンスが存在するCCLayoutである)まずXXまたはYYのccTouchBegan関数に入り、ここではまずXXクラスに入ったと仮定すると、XXクラスのccTouchBeganは応答され、return true;ユーザタッチスクリーンのメッセージをYYクラスに転送して応答しないことを示し、すなわちYYクラスのccTouchBegan関数に応答しない場合、return false;現在のタッチスクリーン情報は、登録されている他のタイプに渡されます.
一言で言えば、returnの値は、本物であれば、ユーザーがイベントをタッチして処理されたことを示し、他のリスニングは行われません.偽物であれば、他の登録されたタイプに処理を渡し続けます.
では、第2の傍受方式が一般的に使われており、処理が容易であるため、登録については、一般的には onEnter関数;onEnter関数は、各CCScene間の切り替えに応答する関数であり、CCSceneのライフサイクル関数に相当し、具体的な呼び出し順序は以下の通りである.