SpriteKit并将多个拖动组合在一起进行一次旋转

时间:2014-09-11 20:11:54

标签: ios xcode rotation sprite-kit trigonometry

我试图重新创建的是在流行的iOS游戏“Fragger”中使用的可拖动箭头,同时根据手指拖动同时调整旋转和拉力的强度完成SpriteKit - 我相信他们是在Cocos2D中做到的。

我首先要说的是,我真的花了很多时间重新学习三角学(http://www.mathsisfun.com/是一个很好的资源)并通过Ray Wenderlich的教程(http://www.raywenderlich.com/35866/trigonometry-for-game-programming-part-1)进行梳理,但我找不到一个用于在SpriteKit对象上执行“集体”拖动旋转和强度的解决方案。

是的,设置一个锚点并旋转那个对象(我正在使用一个箭头)相对容易,所以它指向你的手指,感谢Ray,我有一个非常顺利的动作,利用以下内容: / p>

float angleRadians = atan2f(firstFingerTouchY - _arrow.position.y, firstFingerTouchX - _arrow.position.x);
float angleDegrees = RADIANS_TO_DEGREES(angleRadians);
float rotateDegreesPerSecond = 180 / 0.5; // Would take 0.5 seconds to rotate 180 degrees, or half a circle
float degreesDiff = (angleCurrent - angleDegrees) * 1.0;
float rotateDuration = fabs(degreesDiff / rotateDegreesPerSecond);
然而,这只是等式中的一部分...

同样,第一次拖动很好,因为旋转角度来自箭头的支点(它的锚点)以及我的手指最终的位置。但是,让我们说由于屏幕尺寸的限制,我无法在一次拖动中获得我想要的角度,所以我抬起手指然后将其放回以继续拖动?好吧,我不能使用上面提到的代码,因为只要我第二次放下手指,箭头的旋转就跳到我的手指现在开始的位置 - 再次以相同的方式结束。

所以我认为解决方案是根本不使用箭头的锚点,而是使用初始手指接触点(作为新锚点)并根据该接触点计算箭头的角度以及我的手指移动的位置至?这在理论上是有效的,但是当你试图考虑在“Fragger”中表示的“强度抽取”方面(将手指拉近或远离箭头调整手榴弹投掷的强度),那么你就是不要将手指移向箭头以削弱拉力,而是朝向最初触摸的位置 - 这不仅在视觉上很困难,而且当你的手指靠近原点时,奖励会产生很多旋转的生涩感。 / p>

我现在已经工作了大约一个月了(我提到我讨厌数学)试图创造一种同质化的方法(SIN ... COS ... TAN ...我讨厌你们所有人!)来执行以下操作:

  1. 首先拉动将根据拉动方向旋转箭头,但不会自动指向您的手指(初始角度)
  2. 能够抬起我的手指,将其放回原位并拖动到ADD TO或从当前箭头的旋转中减去。 (delta角)
  3. 我的手指朝向或远离箭头的锚点(相对于箭头的当前角度)的拖动将相应地调整“拉动”的强度。例如,如果箭头已经指向笔直向上,那么继续向上拖动将增加强度,向下将分别降低强度。 (从箭头锚点衍生的斜边)。
  4. 我还需要能够使用另一个手指(2个手指触摸)来协助旋转/力量计算,这样会给我的群集带来更多混乱......
  5. 如果您曾经玩过“Fragger”游戏,那么您将会发现这种单指动作的复杂性,这也是它的功能之美。我可以让它的部分工作 - 我可以旋转它,我可以调整颜色掩码来指示强度 - 但不是所有它一起工作。也许我认为它完全错了,但是我在网上找到的每一个例子都停在简单地旋转一个物体指向你的手指,每一个新的触摸拖动都以相同的结果结束。

0 个答案:

没有答案