1. GL座標系ios
Cocos2D以OpenglES爲圖形庫,因此它使用OpenglES座標系。GL座標系x軸朝右,y軸朝上。默認原點在左下角。 緩存
2. 屏幕座標系函數
蘋果的Quarze2D使用的是不一樣的座標系統,屏幕座標系原點在屏幕左上角,x軸向右,y軸向下。ios的屏幕觸摸事件CCTouch傳入的位置信息使用的是該座標系。所以在cocos2d中對觸摸事件作出響應前須要首先把觸摸點轉化到GL座標系。this
1. GL座標=====>屏幕座標spa
CGPoint touchScreen=[[CCDirector sharedDirector] convertToUI: touchScreen];//轉換爲屏幕座標設計
2. 屏幕座標=====>GL座標code
CGPoint touchGl=[[CCDirector sharedDirector] convertToGL: touchScreen];//轉換爲GL座標對象
2、幀回掉與觸屏響應blog
cocos2d中的schedule有兩種做用繼承
1)定時執行方法,例如每隔3秒鐘執行一次方法
[self schedule:@selector(func) interval:3];
- (void) func{}
2)延時執行方法,例如5秒種後執行方法
[self schedule:@selector(func) interval:5];
- (void) func{
[self unschedule:@selector(func)];
}
CCStandardTouchDelegate 默認事件 | |
---|---|
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); |
處理按下事件 |
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent); |
處理按下並移動事件 |
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent); |
處理鬆開事件 |
virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent); |
處理打斷事件 |
CCTargetedTouchDelegate | |
---|---|
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); |
處理用戶按下事件,true表示繼續處理, 不然false. |
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); |
處理按下並移動事件 |
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); |
處理鬆開事件 |
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); |
處理打斷事件 |
二者的區別: CCSet
與 CCTouch
,一個事件集合一個單個事件。
事件分發的順序: CCTargetedTouchDelegate
→ CCStandardTouchDelegate
。
默認狀況下全部 CCLayer
都沒有啓用觸摸事件,須要 this->setIsTouchEnabled(true);
啓用。
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //得到觸屏信息 NSSet *allTouches = [event allTouches]; UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0]; switch ([allTouches count]) { case 1: //單點事件判斷 switch ([touch1 tapCount]) { case 1: NSLog(@"單擊操做"); break; case 2: NSLog(@"雙擊操做"); break; } break; case 2: { UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1]; } break; } }
3、精靈與CCAction
一、從圖片文件建立:
二、從幀緩存建立:
三、初始化及自定義大小
備註:默認錨點ccp(0.5,0.5),默認位置 ccp(0,0),contentSize爲精靈圖片尺寸
2、精靈經常使用屬性及方法:
3、添加其餘精靈
CCSprite繼承自CCNode,因此你能夠對它進行addChild的操做:
4、精靈Z軸重設
5、精靈換圖
一、直接利用新建貼圖進行更換
二、利用幀替換
Cocos2d-x提供了不少基本的動做類,主要包括兩大類:一類是瞬時動做(CCActionInstant),一類是延時動做(CCActionInterval),今天主要記錄一下延時動做類的通常用法。
ActionTo是指動做結束的狀態,也就是動做的終點。
ActionBy是指動做執行的狀態,也就是動做的執行過程。
經常使用的延時動做類包括:
移動動做:CCMoveBy CCMoveTo
旋轉動做:CCRotateBy CCRotateTo
縮放動做:CCScaleBy CCScaleTo
跳躍動做:CCJumpBy CCJumpTo
淡入淡出動做:CCFadeBy CCFadeIn CCFadeOut
結合CCSequence動做序列設計精靈動做
CCActionInterval *actionTo = CCMoveTo::actionWithDuration(2.0f, CCPointMake(winSize.width * 3 / 4, winSize.height / 2)); CCActionInterval *actionBy = CCMoveBy::actionWithDuration(2.0f, CCPointMake(-winSize.width / 2, 0)); CCActionInterval *actionByCopy = (CCActionInterval *) actionBy->copy(); CCActionInterval *actionBack = actionBy->reverse(); Sprite->runAction(CCSequence::actions(actionTo, actionByCopy, NULL));
含動做回掉的Action
要根據你的需求來定義回調函數。
若是隻是簡單的通知,則使用CCCallFunc;若是須要知道發送者信息,則使用CCCallFuncN;若是還要附帶一些數據信息,則使用CCCallFuncND
CCFiniteTimeAction *actionND = CCSequence::actions(CCMoveBy::actionWithDuration(2.0f, CCPointMake(winSize.width / 2, 0)), CCCallFuncND::actionWithTarget(this, callfuncND_selector(HelloWorld::actionCallbackND), (void *) "Callback Data"), NULL); Sprite->runAction(actionND);
4、粒子系統
使用Cocos2d-x提供的CCParticleSystem來實現,使用這種方法,能夠實現咱們想要的任意效果。
CCParticleSystemQuad *m_emitter=new CCParticleSystemQuad(); m_emitter->initWithTotalParticles(900);//900個粒子對象 //設置圖片 m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.png")); //設置發射粒子的持續時間-1表示一直髮射,0沒有意義,其餘值表示持續時間 m_emitter->setDuration(-1); //設置中心方向,這個店是相對發射點,x正方向爲右,y正方向爲上 m_emitter->setGravity(CCPoint(0,-240)); //設置角度,角度的變化率 m_emitter->setAngle(90); m_emitter->setAngleVar(360); //設置徑向加速度,徑向加速度的變化率 m_emitter->setRadialAccel(50); m_emitter->setRadialAccelVar(0); //設置粒子的切向加速度,切向加速度的變化率 m_emitter->setTangentialAccel(30); m_emitter->setTangentialAccelVar(0); //設置粒子的位置,位置的變化率 m_emitter->setPosition(CCPoint(400,500)); m_emitter->setPosVar(CCPoint(400,0)); //設置粒子聲明,生命的變化率 m_emitter->setLife(4); m_emitter->setLifeVar(2); //設置粒子開始的自旋轉速度,開始自旋轉速度的變化率 m_emitter->setStartSpin(30); m_emitter->setStartSpinVar(60); //設置結束的時候的自旋轉以及自旋轉的變化率 m_emitter->setEndSpin(60); m_emitter->setEndSpinVar(60); ccColor4F cc; cc.a=1.0f; cc.b=255.0f; cc.g=255.0f; cc.r=255.0f; ccColor4F cc2; cc2.a=0; cc2.b=0; cc2.g=0; cc2.r=0; //設置開始的時候的顏色以及顏色的變化率 m_emitter->setStartColor(cc); m_emitter->setStartColorVar(cc2); //設置結束的時候的顏色以及顏色的變化率 m_emitter->setEndColor(cc); m_emitter->setEndColorVar(cc2); //設置開始時候粒子的大小,以及大小的變化率 m_emitter->setStartSize(30); m_emitter->setStartSizeVar(0); //設置粒子結束的時候的大小,以及大小的變化率 m_emitter->setEndSize(20.0f); m_emitter->setEndSizeVar(0); //設置每秒鐘產生粒子的數目 m_emitter->setEmissionRate(100); addChild(m_emitter);
Cocos2d-x爲咱們定義的一些已經作好的粒子效果,咱們只須要指定圖片就好了,具體有哪些,如今就寫下面的這幾個吧。
CCParticleFire
CCParticleFireworks
CCParticleSun
CCParticleGalaxy
CCParticleFlower
CCParticleMeteor
CCParticleSpiral
CCParticleExplosion
CCParticleSmoke
CCParticleSnow *snow=CCParticleSnow::create(); snow->setPosition(ccp(400,670)); snow->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("snow.png"),CCRectMake(0,0,32,32)); addChild(snow);
More : http://cn.cocos2d-x.org/tutorial/