標籤:
讓物體從螢幕的外邊移動到螢幕中指定位置、
代碼:
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 就是再好不過的。
結果:
Quick-cocos2d-x3.3 Study (十一)--------- 讓物體從螢幕的外邊移動到螢幕中指定位置