cocos2D-x 学习之路(一)

忙活了好几天,终于把鱼弄到基本满足了要求,觉得吧,初学者,应该具备分层思想,把要显示的层setVisible 设置为true 反正亦反,最近,主要用到了贝塞尔曲线,旋转等,参考了不少网上的教程,自己也吧唧吧唧下吧。

1、贝塞尔曲线是由三个点控制(一共四个,包括精灵的起点位置) ,两个控制点和一个结束点

ccBezierConfig tr0;  

//随机数,控制贝塞尔曲线是随机的

tr0.controlPoint_1=Vec2((rand()%1000)*pow(-1,rand()%2+1),(rand()%1000)*pow(-1,rand()%2+1));

tr0.controlPoint_2=Vec2((rand()%1000)*pow(-1,rand()%2+1), (rand()%1000)*pow(-1,rand()%2+1));

tr0.endPosition=Vec2(-30,rand()%720);

CCBezierTo::create() //相对于起点的绝对位置

CCBezierBy::create()//相对于起点的相对位置

 

2、旋转

a)Cocos 顺时针方向为正方向 !!!

b)得到两个点 Vec2 oldPos  Vec2 newPos  Vec2 pVectr =  newPos-oldPos;

c)float angleRadians=atan2f(pVectr.y,pVectr.x);//得到幅度角

d)float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);//得到真正的旋转角度 //得到角度 弧度除以pi乘以180

e)ishSprites.at(i)->setRotation(-angleDegrees);//为什么为负数呢?呵呵

3、镜像

a)fish->setFlippedY(true); //相对Y轴的镜像

4、使用.plist 文件

cocos2d::SpriteFrameCache*frameCache = SpriteFrameCache::getInstance();

frameCache->addSpriteFramesWithFile("fish_1.plist","fish_1.png");

5、创建帧动画

a)AnimationCache *animCache = AnimationCache::getInstance(); //得到一个存储动画缓冲区

auto animation = Animation::create();  //创建一个动画,注意名词

for( int i=0;i<getPcitureCount();i++)  //要创建动画(.n)图片的数量

{

//自动获取 .plist 中的图片 ,并加入动画中

char szName[100] = {0};

sprintf(szName, "%s%d.png",getPictureName().c_str(),i);

animation->addSpriteFrame(frameCache->getSpriteFrameByName(szName));

}

//设置这个动画(.n)的一些属性

animation->setDelayPerUnit(1); 

animation->setRestoreOriginalFrame(true);

animation->setLoops(40);

//给动画(.n)取个名字然后加入动画缓冲区中

char tname[30]={0};

sprintf(tname,"%s_%d",getCreateFishName().c_str(),i);

//增加动画(.n)

CCAnimationCache::getInstance()->addAnimation(animation,tname);

//使用创建的动画(.n)

AnimationCache *animCache = AnimationCache::getInstance(); //获得对象

Animation *animation = animCache->getAnimation(tName);//根据刚刚的名字,获得动画(.n)

Animate *animate = Animate::create(animation);//根据动画(.n)创建动画(.v)

animate->setDuration(getDurationTime());//鱼的摆动速度

Sequence *seq = Sequence::create(DelayTime::create(i/2.0),CCBezierTo::create(getBeizerTime(), tr0),NULL);//先后执行 先延时(因为我有好多条鱼,延时起到先后出场的效果) ,后走贝塞尔曲线 注意最后为NULLfish->runAction(CCEaseSineOut::create(Spawn::create(animate,seq,NULL)));//fish是我创建的精灵,这个时候把这些动作赋予这个精灵,这个精灵就可以走贝塞尔曲线辣

6、使用schedule 多种方式,自己只使用了两种

a) 在init()函数中直接调用scheduleUpdate(),然后直接重写update()方法,这样在每帧都会调用update函数了

b) 在init()函数中直接调用schedule(schedule_selector(HelloWorld::myupdate),0.05f); myupdate 是自定义函数,后面是刷新时间,哈有其他参数,自行看源码

7、获取时间轴动画

a) auto mainScene = CSLoader::createTimeline ("MainScene.csb"); //注意要加入命名空间using namespace cocostudio::timeline;

 

8、获取根节点 auto rootNode = CSLoader::createNode("MainScene.csb");

9、获取子节点 Layer* FirstLayer1 =(Layer *)rootNode->getChildByName("FirstLayer");

10、设置Z轴,可以改变遮挡效果 FirstLayer2->setLocalZOrder(3); //数字越大越在最上层

11、接下来写棋牌游戏,有经验的谁,可以交流下吗?害羞


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值