Quick-cocos2d-x3.3 Study (十一)--------- 让物体从屏幕的外边移动到屏幕中指定位置
让物体从屏幕的外边移动到屏幕中指定位置、
代码:
1 -- 添加动画, 2 -- 1. 创建冰菇的第一个图片, 3 -- 2. 设置图片位置, 4 -- 3. 将图片添加到场景中, 5 self.player = display.newSprite( "#binggu_01.png" ) 6 self.player:align( display.CENTER, - self.player:getContentSize().width, display.cy ) 7 self.player:addTo(self) 8 9 -- 创建一个包含flying1.png到flying4.png的4个图像帧对象的数组 10 local frames = display.newFrames( "binggu_0%d.png", 1, 7 ) 11 12 -- 以包含图像帧的数组创建一个动画 Animation 对象 13 local animation = display.newAnimation( frames, 0.3 / 4 ) 14 15 -- 在显示对象上循环播放动画,并返回 Action 动画动作对象 16 transition.playAnimationForever( self.player, animation ) 17 18 -- 创建动作,顺序执行的动作 19 -- 1. 移动到屏幕的中间位置 20 -- 2. 打印移动到的位置坐标 21 local action = transition.sequence( 22 { 23 cc.MoveTo:create( 5, cc.p( display.cx, display.cy ) ), 24 cc.CallFunc:create( 25 function () 26 print("---- player:getPosition() ----", self.player:getPosition() ) 27 end ) 28 } 29 ) 30 -- 让player执行这个动作 31 self.player:runAction(action)
在这个函数中,
我们先从动画缓存中取得了我们需要的动画,
然后让 self.player 主角不停的播放这个动画;
接着又创建了一个动作(action)让 self.player 执行。
transition.sequence() 方法能创建一个 Sequence 动作序列对象,
Sequence 类型的对象能使一个 Node 顺序执行一批动作,
这里创建了一个先执行 MoveTo 动作,
等 MoveTo 动作执行完后再执行 CallFunc 动作的对象。
通俗一点说它的作用就是,先移动到屏幕的(display.cx, display.cy)点,在调用 function()中的print()方法。
MoveTo 动作应该不难理解,因为第四章我们也讲过它的兄弟 MoveBy。
MoveBy 动作能使节点从当前坐标点匀速直线运动到相对偏移了一定向量的位置上。
而 MoveTo 则能使节点从当前坐标点匀速直线运动到指定的位置坐标上。
它们的移动位置一个是相对的,一个是绝对的,这也是Cocos 引擎中所有以 To,By 为后缀的动作的主要区别。
CallFunc 动作是个函数回调动作,它用来在动作中进行方法的调用,
个人觉得它是非常有必要存在的一个动作。
因为很多时候,当某些动作完成后,需要执行一些数据或逻辑上的处理
(比如,一个敌人播放完死亡动画后需要把它移除并清理内存),
这时使用函数回调动作 CallFunc 就是再好不过的。
结果: