在了解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是先看目标现在所在位置的座标点,然后再进行座标计算,得到新座标的值,再进行相应的动作。