如何使SKSpriteKit节点彼此弹跳

4

我知道如何设置物理属性,但不知道如何编写代码使它们像桌球上的球一样真实地相互弹跳。我准备好了我的didBeginContact方法。

-(void)didBeginContact:(SKPhysicsContact*)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (gearCategory | gear1Category)) {
    [
}
}

但是我不知道需要什么代码,有没有数学和矢量技能很好的人可以帮助我?


didBeginContact方法只是一个代理,即通知器,用于告知两个物体相互接触的情况。 - ZeMoon
1个回答

4
这在Sprite Kit中非常容易实现。
//Add to top of scene
static const uint32_t spriteCategory =  0x1 << 0;

//declare when creating sprite
sprite.physicsBody.categoryBitMask = spriteCategory;
sprite.physicsBody.collisionBitMask = spriteCategory;

这行代码的作用是将一个精灵设置为与所有具有spriteCategory作为categoryBitMask的精灵发生碰撞。您可以使用以下代码将精灵设置为与多个不同的categoryBitMasks发生碰撞。
sprite.physicsBody.collisionBitMask = spriteCategory|otherCategory|anotherCategory;

当节点接触时,可以使用Did begin contact执行一些代码。您可以使用contactTestBitMask属性检测物品何时接触。collisionBitMask会自动处理碰撞!

我附上了一个链接,其中有一个完整的部分专门介绍碰撞和接触。

http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners


有没有办法让它们永远不超过一定的速度。目前,它们只是不断地相互碰撞增加速度,最终飞出屏幕。 - user3593148
2
sprite.physicsBody.restitution = 0; 这个数字可以调整“弹性”属性。 - meisenman
如果您的问题得到了解答,请将其标记为已回答 :) - meisenman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接