在瞭解cocos2d的過程中,看到了MoveTo和MoveBy兩個動作 ,剛開始完全有點模糊兩個動作所做的事情 ,cocos2d中國官網給出的解釋如下:
By 和 To 的區別
你能注意到,每一個動作都會有兩個方法 By 和 To。兩種方法方便你在不同的情況使用,By 算的是相對於節點對象的當前位置,To 算的是絕對位置,不考慮當前節點對象在哪。如果你想動作的表現是相對於 Node
當前位置的,就用 By,相對的想讓動作的表現是按照座標的絕對位置就用 To。
其實解釋的也比較清楚了,奈何不能形成長久記憶,於是決定用代碼來幫助自己記憶這兩個動作的區別。
首先在界面上創建一個精靈:
local sprite = CCSprite:create("ic_launcher.png")
sprite:move(display.cx,display.cy):addTo(self)
效果如下圖,看中間那個小綠人:
然後,首先調用MoveTo:
local movePathTo = cc.MoveTo:create(2,cc.p(100,100))
sprite:runAction(movePathTo)
得到的效果如下:
代碼中給的參數是100,100,所以這裏MoveTo得到的效果是小綠人在2秒內移動到以原點爲座標系的(100,100)的座標點。
下面來看MoveBy的效果,首先上代碼:
local movePathBy = cc.MoveBy:create(2,cc.p(100,100))
sprite:runAction(movePathBy)
效果圖:
這張圖的效果很明顯就是在初始點座標的基礎上,X,Y都增加了100的新座標的位置。
總結:現在來看就很清晰了,MoveTo不會去管目標現在所在位置,而是去取絕對座標。MoveBy是先看目標現在所在位置的座標點,然後再進行座標計算,得到新座標的值,再進行相應的動作。