1. 程式人生 > >Cocos2d中的五個重要協議

Cocos2d中的五個重要協議

1. 觸控協議

分別是CCStandarTouchDelegateCCTargetedTouchDelegate。前面一個協議功能和UIView裡面的touch方法一模一樣,只是方法名稱前加了cc,後面的協議只處理單個觸控,並且可以吞噬觸控。

觸控實現是先被EAGLView接收,然後讓CCTouchDispatcher單例處理,dispatcher則統一讓實現CCStandarTouchDelegateCCTargetedTouchDelegate的物件處理。但前提是這些物件必須在dispatcher裡面註冊了。

  所以,任何一個CCNode

,只要實現了觸控協議,並且例項註冊到dispatcher裡面,就可以接收並處理觸控資訊了。

   CCTargetedTouchDelegate可以實現自定義選單。如果設定可以吞噬觸控,ccTouchBegan返回YES,則不會往下傳遞觸控事件了,如果返回NO,則會傳遞,但是本類中的其他觸控資訊將被忽略。


CCRGBAProtocol 實現此協議的類可以設定 ccColor3B 型別的顏色 和 0-255 的透明度

 

@protocol  CCRGBAProtocol < NSObject >   // 設定 ccColor3B 結構的顏色資料
-( void ) setColor:(ccColor3B)color; -(ccColor3B)color;   // 如果紋理有 Premultiplied Alpha 資料 那麼更改透明度同時會更改RGB通道的值 -( void )setOpacity:(GLubyte)opacity; -(GLubyte)opacity;   // 可選實現 @optional // 設定更改透明度時是否修改RGB值 // 如果設定YES, 透明度被設定時將會呼叫: glColor(opacity,opacity, opacity,opacity) // 如果設定NO, 透明度唄設定時將會呼叫: glColor(R,G,B,opacity) // 紋理如果有 premultiplied alpha資料將會預設把此項設定為YES, 否則設定為NO -( void )setOpacityModifyRGB:( BOOL )boolean; // 返回更改透明度時是否修改RGB值 -( BOOL )doseOpacityModifyRGB; @end

CCBlendProtocol 支援混合協議可以讓物件指定GL不同的混合函式 ccBlendFunc 渲染紋理

 

@protocol  CCBlendProtocol < NSObject >   // 指定渲染函式 -( void )setBlendFunc:(ccBlendFunc)blendFunc; -(ccBlendFunc)blendFunc;   @end

CCTextureProtocol 支援紋理協議可以使得物件使用紋理來渲染自己.
CCNode及其子類使用 Texture2D 類來渲染圖片.
紋理可以包含一個 混合函式, 此函式可以在任意時間被更改

 

@protocol  CCTextureProtocol < NSObject > -(CCTexture2D *)texture; -( void )setTexture:(CCTexture2D *)texture; @end

CCLabelProtocol 所有Label相關物件都實現此協議. 此協議提供一個設定標籤文字的介面

 

@protocol  CCLabelProtocol < NSObject > -( void ) setString:( NSString  *)label; -( NSString  *)string;   @optional // 使用 C字串, 此方法要比NSString快, 因為不需要向NSString傳送alloc/retain/release訊息 -( void )setCString:( char  *)label; @end

CCDirectorDelegate 實現 CCDirector代理 協議的類可以響應CCDirector的 裝置旋轉 更新投影的訊息

 

@protocol  CCDirectorDelegate < NSObject >   @optional // 當CCDirector 使用了自定義 Projection 並且在投影更新時,會向代理髮送此訊息 -( void ) updateProjection;   // 檢查當前應用是否支援指定的裝置方向 -( BOOL )shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation;   @end