cocos2d-x中,多个精灵执行同样的动作
2015-09-16 15:22
579 查看
简而言之:虽然是“同样”(从效果来说)的动作,但是每个精灵必须run不同的action对象
例如:需要三个精灵同时跑到一个点去,使用动作来完成。
//创建3个精灵
auto s1 = Sprite::create("CloseNormal.png");
auto s2 = Sprite::create("CloseNormal.png");
auto s3 = Sprite::create("CloseNormal.png");
//设置位置在屏幕左边1/4处,分上中下来放
s1->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.75));
s2->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.5));
s3->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.25));
//添加到层中显示
this->addChild(s1);
this->addChild(s2);
this->addChild(s3);
//创建动作,移动到屏幕右边3/4处的中心位置
auto action = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
//三个精灵执行这个动作
s1->runAction(action);
s2->runAction(action);
s3->runAction(action);结果:只有s3跑到目的地,s1和s2都没动。
如图:
开始时:
运动结束:
因为三个精灵使用了同一个action对象。下面来修改一下,给每个精灵创建一个对象。
<pre name="code" class="cpp">//创建3个精灵
auto s1 = Sprite::create("CloseNormal.png");
auto s2 = Sprite::create("CloseNormal.png");
auto s3 = Sprite::create("CloseNormal.png");
//设置位置在屏幕左边1/4处,分上中下来放
s1->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.75));
s2->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.5));
s3->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.25));
//添加到层中显示
this->addChild(s1);
this->addChild(s2);
this->addChild(s3);
//创建动作,移动到屏幕右边3/4处的中心位置
auto action1 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
auto action2 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
auto action3 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
//三个精灵执行这个动作
s1->runAction(action1);
s2->runAction(action2);
s3->runAction(action3);
开始的图和之前一样,结果如图(三个精灵都到达目的地):
例如:需要三个精灵同时跑到一个点去,使用动作来完成。
//创建3个精灵
auto s1 = Sprite::create("CloseNormal.png");
auto s2 = Sprite::create("CloseNormal.png");
auto s3 = Sprite::create("CloseNormal.png");
//设置位置在屏幕左边1/4处,分上中下来放
s1->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.75));
s2->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.5));
s3->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.25));
//添加到层中显示
this->addChild(s1);
this->addChild(s2);
this->addChild(s3);
//创建动作,移动到屏幕右边3/4处的中心位置
auto action = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
//三个精灵执行这个动作
s1->runAction(action);
s2->runAction(action);
s3->runAction(action);结果:只有s3跑到目的地,s1和s2都没动。
如图:
开始时:
运动结束:
因为三个精灵使用了同一个action对象。下面来修改一下,给每个精灵创建一个对象。
<pre name="code" class="cpp">//创建3个精灵
auto s1 = Sprite::create("CloseNormal.png");
auto s2 = Sprite::create("CloseNormal.png");
auto s3 = Sprite::create("CloseNormal.png");
//设置位置在屏幕左边1/4处,分上中下来放
s1->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.75));
s2->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.5));
s3->setPosition(Vec2(visibleSize.width * 0.25, visibleSize.height * 0.25));
//添加到层中显示
this->addChild(s1);
this->addChild(s2);
this->addChild(s3);
//创建动作,移动到屏幕右边3/4处的中心位置
auto action1 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
auto action2 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
auto action3 = MoveTo::create(3, Vec2(visibleSize.width * 0.75, visibleSize.height * 0.5));
//三个精灵执行这个动作
s1->runAction(action1);
s2->runAction(action2);
s3->runAction(action3);
开始的图和之前一样,结果如图(三个精灵都到达目的地):
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- ActionScript 3.0 编程体验
- 再谈Jquery Ajax方法传递到action(补充)
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解