我在 spritekit/IOS 中工作,我有一个按钮,当点击它时运行一个动作。该按钮工作正常,但我的行为很糟糕。单击时,我运行此操作。
actionMove=[SKAction moveTo:CGPointMake(300,300)duration:2.0];
Run Code Online (Sandbox Code Playgroud)
然后导致我的精灵在那个位置旋转飞踢。我需要一点帮助,因为我尝试将 y 轴替换为
_sprite.position+10
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误。谢谢
你需要的是行动moveByX:y:duration:...
有点。
你可以这样做...
SKAction *rise = [SKAction moveByX:0 y:10 duration:1];
SKAction *fall = [SKAction moveByX:0 y:-10 duration:1];
SKAction *jump = [SKAction sequence:@[rise, fall]];
Run Code Online (Sandbox Code Playgroud)
然后你可以jump在你的精灵上运行这个动作。
这将使精灵在 1 秒内向上移动 10 点,然后在 1 秒内向下移动 10 点。
但是,它看起来不会像跳跃。它不会加速或任何东西。
如果您在游戏中包含诸如跳跃之类的内容,那么您通常希望对地板进行某种碰撞检测,并使用力来移动您的精灵而不是动作。
碰撞检测方法
Sprite Kit 物理引擎
有两种一般方法可以做到这一点。最简单的(尽管最长的学习曲线)是使用SKPhysicsBody与内置的物理引擎SpriteKit。
您将向SKPhysicsBody角色添加,并将边界 SKPhysicsBody 添加到地板。
然后要使角色跳跃,您将使用类似...
[character.physicsBody applyImpulse:CGVectorMake(0, 1)];
Run Code Online (Sandbox Code Playgroud)
这将对角色施加直接的力,使其在空中“跳跃”。然后使用您在重力中构建的物理引擎,因此角色将开始减速并下落,直到它再次撞到地板。
为此需要进行一些设置(比您想象的要少),但是一旦设置完成,其余的就非常非常简单了。
手动
手动完成是另一种情况。这不需要设置,但需要大量的数学。其工作方式是使用该update:函数,然后每个更新周期计算角色的速度和位置,并相应地更新位置。
不过你真的不想这样做。
通过添加SKPhysicsBody需要碰撞的东西(角色和地板),然后利用重力和applyImpulse. 它将使它变得更容易,它会执行得更快,而且看起来会好一百万倍:D
| 归档时间: |
|
| 查看次数: |
1624 次 |
| 最近记录: |