cocos2d-x中MoveTo和MoveBy的區別(可引申爲To和By的區別,代碼爲lua)

        在瞭解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是先看目標現在所在位置的座標點,然後再進行座標計算,得到新座標的值,再進行相應的動作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章