Cocos2d中的五個重要協議
阿新 • • 發佈:2018-12-05
1. 觸控協議
分別是CCStandarTouchDelegate和CCTargetedTouchDelegate。前面一個協議功能和UIView裡面的touch方法一模一樣,只是方法名稱前加了cc,後面的協議只處理單個觸控,並且可以吞噬觸控。
觸控實現是先被EAGLView接收,然後讓CCTouchDispatcher單例處理,dispatcher則統一讓實現CCStandarTouchDelegate和CCTargetedTouchDelegate的物件處理。但前提是這些物件必須在dispatcher裡面註冊了。
所以,任何一個CCNode
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
|