Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置动画时移动动作_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios 设置动画时移动动作

Ios 设置动画时移动动作,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我试图让一个角色在用户触摸屏上从a点移动到B点 我目前正在使用SKActions(在一个小组中)进行此操作。然而,我已经注意到,SKActions需要一段时间,所以不会有恒定的移动速度,这是一个交易破坏者。距离越近,角色移动越慢,而距离越远,角色移动越快 有更好的方法吗?我正在考虑在场景中使用-update方法,但不确定将其与触摸事件联系起来的最佳方式是什么 有什么建议吗?您仍然可以通过SKAction和grouping来实现这一点 首先,你要计算两点之间的距离,a^2+b^2=c^2(毕达哥拉

我试图让一个角色在用户触摸屏上从a点移动到B点

我目前正在使用SKActions(在一个小组中)进行此操作。然而,我已经注意到,SKActions需要一段时间,所以不会有恒定的移动速度,这是一个交易破坏者。距离越近,角色移动越慢,而距离越远,角色移动越快

有更好的方法吗?我正在考虑在场景中使用-update方法,但不确定将其与触摸事件联系起来的最佳方式是什么


有什么建议吗?

您仍然可以通过SKAction和grouping来实现这一点

首先,你要计算两点之间的距离,
a^2+b^2=c^2
(毕达哥拉斯定理)之类的东西。然后根据c^2以恒定速度计算角色移动的速度

然后只需将该变量发送到所组成的
SKAction
函数。这样它是动态的

-(SKAction*)startActionWithDuration:(NSTimeInterval)timeInterval {
    SKAction* action = [SKAction moveToX:1.0 duration:timeInterval];
    return action;
}

你所需要做的就是使用距离和速度自己计算持续时间

速度=距离/时间,时间是你的持续时间,所以求解t

在这里使用一些psedoo代码:

function moveToWithSpeed(p1, endPoint: p2, speed: speed)
{
//credit: http://stackoverflow.com/questions/1906511/how-to-find-the-distance-between-two-cg-points
CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
duration = distance/speed

SKAction.moveTo(p2, duration: duration);
}

其余的我想你可以自己解决。

为什么你不能做动态持续时间?我觉得在Cocos2D中,通过在CCNode的-update方法中使用恒定速度,这样做更容易(更干净?)。我想我有点希望得到一些关于如何使用SpriteKit实现这一点的指导。我明白了,你不想做数学运算,你想让SDK自动为你做。不幸的是,根据我的经验,没有一种无数学的方法来计算,因为你指出,一切都是基于持续时间的。只要把它包装在一个函数中,它可以为你计算持续时间,给定一个速度和点。。。(速度=d/t),一些简单的代数,你可以计算它。这是一个非常容易完成的任务。如果你希望你的SDK为你做任何事情,那么你自己就真的很有限。我可以在不到2分钟内编写这个函数,您就可以开始了,但这不是开发的重点。你也需要学习。@MrShoot我认为这个答案是正确的。查看API引用将确认它没有等效的API。约翰给你的正是你想要得到的。如果问题是关于是否有API等效物,他本可以说“不”。因此,在我看来,他为你做了一个额外的步骤,他确实将API与数学结合使用。this+mine=你需要的一切。另一个步骤是让方法像在另一个答案中一样返回SKAction,这样你仍然可以根据需要对它们进行分组/排序。投票支持这个答案,只是建议海报注意另一个答案的这一方面,因为这可能是你的下一个问题。我就是这样做的:)在这种情况下,速度的衡量标准是什么?如果我的回答不正确,那么我显然不理解你的问题。据我所知,你想要一种保持恒定运动速度的方法。