求大神解惑,关于定时回调MoveTo,精灵不是到达指定位置

我自定义了一个定时回调设定为每0.05秒调用一回,然后写了一个
Point Position = sprite->getPosition();
Size floorSize = floor->getContentSize();
float time = (Position.y-240)/135;
sprite->runAction(Sequence::create(MoveTo::create(time, Point(Position.x, floorSize.height + 40)), NULL));
我试着将time和floorSize.height改为固定值还不行,这是怎么回事?time初始值大概是2秒多。

怎么没人理我啊,欺负新人啊?

求解惑!!

Sequence多余了,只有一个动作不需要序列

MoveTo底层实现是MoveBy,所以在使用MoveTo的时候要注意:必须保证MoveTo被调用的时候的位置和打算调用MoveTo的时候位置一样
对于你的问题,你可以写一个sprite然后添加一个触摸事件,在onTouchMoved中分别使用setPosition MoveTo MoveBy你会发现问题:
setPosition MoveBy可以实现sprite跟着触摸点走,但是MoveTo时,sprite会乱飘
造成这种问题的原因就是MoveTo是由MoveBy实现的,所以他是在sprite当前的位置添加MoveBy来实现的,但是在MoveTo这个动作完成之前,如果改变了位置,那么结果就会错掉,所以你的代码会出现问题,因为你上一次的动作还没有完成,
简单来说
初始位置100,100
第一次运动目标是200,200,事件是2秒,底层就是一个MoveBy 100,100
在运动开始1秒后,假设当前位置是150,150,这时第二次moveto添加进来,目标是300,300,底层就是一个MoveBy150,150,你试验一下就会发现问题了

2赞

可是我每次目标位置是一样的啊

每次运动目标都是固定值

删了也一样

你想每0.05s一次动作,动作是用2s的时间把精灵移到一个固定位置?

你将你是时间改成0.04s

大神,说说啊!

你要搞清楚一点,moveto是用moveby实现的,你每次的目标一样,跟你最终的结果是没有固定关系的,例如sprite起点Point(0,0)第一次moveto(100,100),假设此时sprite运动到Point(50,50),此时第二次moveto(Point(100,100)),之后不添加任何运动,那么结果就是第一次一个MoveBy(Point(100,100)) 第二次一个MoveBy(point(50,50)),这就是造成问题的原因,moveto的实现是用moveby的,也就是说根本不存在真正意义的moveto,所有的都是moveby,moveto也好,moveby也好,结果就是当前坐标和目的坐标的矢量和

其实我也一直有个疑问,为什么move动画要基于moveBy来实现,感觉很不稳定不靠谱,为什么不用moveTo?
请大佬解惑。

猜想是因为底层都是向量和矩阵,因此容易实现按某一方向移动多少距离。很难忽略精灵的当前位置,去将精灵移动至一个固定点,因为没办法用一个静态的向量去表示。