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

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