【cocos2d-x游戏开发】图片的“运动”

【cocos2d-x游戏开发】图片的“运动”,第1张

概述一、精灵的移动 1.moveTo moveTo的解释很简单,意思就是把精灵移动到指定的位置,这个“到”子很重要,下面的MoveBy和这个有区分。 <span style="white-space:pre"> </span>Size visibleSize = Director::getInstance()->getVisibleSize(); //获取屏幕尺寸 一、精灵的移动 1.moveto moveto的解释很简单,意思就是把精灵移动到指定的位置,这个“到”子很重要,下面的MoveBy和这个有区分。
<span >	</span>Size visibleSize = Director::getInstance()->getVisibleSize();                   //获取屏幕尺寸	Sprite* xiaoRuo = Sprite::create("sprite.png");                                       //创建一个图片精灵	xiaoRuo->setposition(Point(50,visibleSize.height / 2));                   //设置图片精灵的初始位置	this->addChild(xiaoRuo);                                                              //将精灵加入到场景中	Moveto* moveto = Moveto::create(0.9f,Point(250,150));          //创建一个Moveto动作对象	/*Moveto::create函数中第一个参数的作用是精灵移动到指定位置所花费的时间,单位为秒										    第二个参数为指定精灵要移动的位置*/	xiaoRuo->runAction(moveto);                         //执行动作
2.MoveBy 这个MoveBy的移动是在精灵所在位置的基础上移动的,比如说我们指定的第二个参数为Point(250,150),则精灵会向x方向移动250的距离,向y方向移动150的距离。如果换成Moveto则精灵会移动到(250,150)所在的位置。
	Size visibleSize = Director::getInstance()->getVisibleSize();                   //获取屏幕尺寸	Sprite* xiaoRuo = Sprite::create("sprite.png");                                       //创建一个图片精灵	xiaoRuo->setposition(Point(50,visibleSize.height / 2));                   //设置图片精灵的初始位置	this->addChild(xiaoRuo);                                                              //将精灵加入到场景中	MoveBy* moveBy = MoveBy::create(0.9f,150));          //创建一个Moveto动作对象	/*Moveto::create函数中第一个参数的作用是精灵移动到指定位置所花费的时间										    第二个参数为指定精灵要移动的位置*/	xiaoRuo->runAction(moveBy);                         //执行动作

3.Scaleto Scaleto的意思就是拉伸当前精灵到指定的值(x方向拉伸,y方向拉伸)
	Size visibleSize = Director::getInstance()->getVisibleSize();                   //获取屏幕尺寸	Sprite* xiaoRuo = Sprite::create("sprite.png");                                       //创建一个图片精灵	xiaoRuo->setposition(Point(visibleSize.wIDth,visibleSize.height / 2));                   //设置图片精灵的初始位置	this->addChild(xiaoRuo);                                                              //将精灵加入到场景中	Scaleto* scaleto = Scaleto::create(2.8f,0.4f,1.0f);              //创建一个Scaleto对象	/*Scaleto::create函数的第一个参数为完成这一动作持续的时间,单位为秒	                                      第二个参数为X方向的拉伸值											第三个参数为Y方向的拉伸值*/	xiaoRuo->runAction(scaleto);                       //执行动作

4.ScaleBy ScaleBy的意思就是说精灵拉伸是在当前的倍数基础上拉伸的,默认的是1.0倍,这时候我们指定第二个参数为0.4f,则x方向会拉伸当前值的0.4倍,也就是0.4,如果原来是2.0倍,第二个参数还是0.4f,那么就是说精灵要向x方向拉伸0.8倍。这里的拉伸倍数都是以原始大小为基准的。
	Size visibleSize = Director::getInstance()->getVisibleSize();                   //获取屏幕尺寸	Sprite* xiaoRuo = Sprite::create("sprite.png");                                       //创建一个图片精灵	xiaoRuo->setposition(Point(visibleSize.wIDth,visibleSize.height / 2));                   //设置图片精灵的初始位置	this->addChild(xiaoRuo);                                                              //将精灵加入到场景中	ScaleBy* scaleBy = ScaleBy::create(2.8f,1.0f);              //创建一个Scaleto对象	/*Scaleto::create函数的第一个参数为完成这一动作持续的时间,单位为秒	                                      第二个参数为X方向的拉伸值											第三个参数为Y方向的拉伸值*/	xiaoRuo->runAction(scaleBy);                       //执行动作
5.Blink Blink可以使精灵闪烁,并且可以指定闪烁次数。
	Size visibleSize = Director::getInstance()->getVisibleSize();                   //获取屏幕尺寸	Sprite* xiaoRuo = Sprite::create("sprite.png");                                       //创建一个图片精灵	xiaoRuo->setposition(Point(visibleSize.wIDth,visibleSize.height / 2));                   //设置图片精灵的初始位置	this->addChild(xiaoRuo);                                                              //将精灵加入到场景中	Blink* blink = Blink::create(3.0f,3);                           //创建一个Blink动作对象	/*Blink::create函数的第一个参数为动作持续的时间,单位为秒									第二个参数为在规定的时间内闪烁的次数*/	xiaoRuo->runAction(blink);                       //执行动作

6.BezIErTo和BezIErBy BezIErTo和BezIErBy能够让精灵按照贝塞尔曲线移动。 贝塞尔的结构体如下所示
贝兹曲线的描述结构体如下:/** @typedef bezIEr configuration structure  */ typedef struct _ccBezIErConfig {             //! end position of the bezIEr             CCPoint endposition;             //! BezIEr control point 1             CCPoint controlPoint_1;             //! BezIEr control point 2             CCPoint controlPoint_2; } ccBezIErConfig;
当使用BezIErTo的时候,ccBezIErConfig的点都是绝对坐标点,当使用BezIErBy的时候,ccBezIErConfig的点是相对坐标点。

	Sprite* sprite = Sprite::create("sprite.png");            //创建一个精灵	sprite->setposition(Point(50,180));                      //指定精灵的初始位置	this->addChild(sprite,1,1);                        //将精灵插入到场景中	/*addChild函数的参数有三个:							第一个就是精灵的指针							第二个就是绘制层的顺序,默认参数值为0,表示最高优先层导入,该值越大表示该层在最后加载(在最高一层)							第三个参数为Tag标记,如果以后在该类的其他方法中要访问这个变量时可以通过调用函数getChildByTag来取回该对象,							然后可以对该对象进行 *** 作,这样做的好处是降低系统资源的占用*/	ccBezIErConfig bezIEr;                                      //创建贝塞尔曲线的设置	bezIEr.controlPoint_1 = Point(100,0);             //波谷偏向值	bezIEr.controlPoint_2 = Point(200,250);         //波峰偏向值	bezIEr.endposition = Point(300,50);             //动作终点	BezIErTo* bezIErTo = BezIErTo::create(4.0f,bezIEr);        //创建一个BezIErTo对象	/*BezIErTo::create第一个参数为动作完成所需的时间单位为秒								第二个参数为已经创建好的贝塞尔曲线的设置*/	sprite->runAction(bezIErTo);                        //执行动作

如果把上述代码中的BezIErTo换成BezIErBy效果就不一样了,这是因为BezIErBy是在精灵当前位置的基础上进行移动的。
7.RepeatForever 这个函数可以让精灵一直重复一个动作。
	Size visibleSize = Director::getInstance()->getVisibleSize();                  //获取屏幕尺寸	Sprite* sprite = Sprite::create("sprite.png");                                           //创建一个精灵	sprite->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));  //设置精灵的初始位置	this->addChild(sprite);                      //将精灵加入到场景中	JumpBy* jumpBy = JumpBy::create(3.0f,Point(50,1),100,1);                   // 创建一个JumpBy动作对象	/*JumpBy::create函数的第一个参数为完成动作所需的时间,单位为秒										第二个参数为目标位置(目标位置是相对的,是按照精灵原来的位置作为基础的)										第三个参数为跳跃的高度										第四个参数为在规定的时间内跳跃的次数*/	RepeatForever* repeatForeverAction = RepeatForever::create(jumpBy);          //创建一个永久动作的对象(参数为动作的指针)	sprite->runAction(repeatForeverAction);             //执行动作


8.Sequence和Spawn
Spawn也是一个动作,只是这个动作是有其他动作合成的一个动作,也就是说所有动作一起播放。 Sequence也是一个动作,这是一个把之前动作合在一起的动作,只不过它是一个动作一个动作有序播放的。
	Size visibleSize = Director::getInstance()->getVisibleSize();                     //获取屏幕的尺寸	Sprite* sprite = Sprite::create("sprite.png");                    //创建一个精灵对象	sprite->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));                      //设置精灵对象的初始位置	this->addChild(sprite);                       //将精灵对象插入到场景中	MoveBy*   moveBy = MoveBy::create(2.2f,Point(40,20));                //创建一个移动对象	/*MoveBy::create函数的第一个参数为完成移动动作所需要的时间,单位为秒										第二个参数为目标位置(这里的位置是相对于初始位置来说的)*/	JumpBy* jumpBy = JumpBy::create(3.0f,5);                       //创建一个跳跃动作	/*JumpBy::create函数的第一个参数为完成这一个跳跃动作所需要的时间,单位为秒											第二个参数为跳跃的目标位置(这里的位置是相对于初始位置来说的)											第三个参数为跳跃的高度											第四个参数为在规定的时间内跳跃的次数*/	Action* actions = Spawn::create(moveBy,jumpBy,NulL);   //创建组合动作对象,将所有动作连起来	sprite->runAction(actions);             //执行动作

Action是所有动作的父类,Spawn也是一个动作,只不过这个动作是由好几个动作组成的,最后一个参数为NulL,是因为Spawn的create函数参数为可变参数,需要用NulL值表示结束。当然了Action也可以用Spawn来取代。 如果想让动作一个接一个的播放就把Spawn换成Sequence就可以了,因为其他都一样,下面就不贴代码了。 9.RotateBy和Rotateto 产生旋转效果。
	Size visibleSize = Director::getInstance()->getVisibleSize();                  //获取屏幕尺寸	Sprite* sprite = Sprite::create("sprite.png");                                           //创建一个精灵	sprite->setposition(Point(visibleSize.wIDth / 2,visibleSize.height / 2));  //设置精灵的初始位置	this->addChild(sprite);                      //将精灵加入到场景中	RotateBy* rotateBy = RotateBy::create(2.5f,220,10);                      //创建一个旋转对象	/*RotateBy::create函数的第一个参数为完成这一动作所需要的时间,单位为秒										第二和第三个参数分别为精灵在x和y方向上喜欢转的角度										(这里的角度为相对角度,是在原来精灵的基础上旋转的)*/	sprite->runAction(rotateBy);             //执行动作
这里要区分一下RotateBy和Rotateto的区别。 总结

以上是内存溢出为你收集整理的【cocos2d-x游戏开发图片的“运动”全部内容,希望文章能够帮你解决【cocos2d-x游戏开发】图片的“运动”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1005209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存