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/