首页 文章

使物理主体在对象上具有一定的大小和位置 . (SpriteKit)

提问于
浏览
1

我正在创建一个项目(钓鱼游戏),该项目涉及一条长线,末端有一个钩子,用于捕捉在屏幕上移动的物体(鱼) . 当鱼与钩子碰撞时我想要一个功能运行 . 但是我只希望函数在挂钩被联系而不是线路的其余部分时运行 . 钩子是与线路相同的SKSpriteNode的一部分 . 如何使线的物理体位于最底部,以便仅在鱼撞到线的底部或底部时调用该函数?我已经知道如何改变物理体的大小而不是位置 .

2 回答

  • 1

    让你的线2 Sprite,Line和hook,并让hook成为line的孩子 . 给每个精灵赋予自己的物理体,并拥有自己的类别 . 通过这种方式,你可以创建一些整洁的效果,如果你使用SKPhysicsJoint,给它一个悬挂在一条线上的钩子的外观 . 如果你仍然希望将它保持为1 Sprite,那么当你创建Physics Body时,一些构造函数有一个你可以操作的中心 . 你的另一个选择是你使用一个SKNode,添加物理主体,将这个新节点添加到你的精灵,并将节点移动到钩子

  • 0

    当您使用 didBeginContact(contact: SKPhysicsContact) 函数时,您可以拥有 contact.bodyA.node e contact.bodyB.node ,这两个对象涉及到联系人,但您还有 contact.contactPoint ,这两个对象已触及的点 .

    关于你的钩子,我首先要做两个不同的对象:

    • 钩子(带有精确 CGPathSKShapeNode

    • 钓鱼线

    但这不是你的情况 .

    所以,你的精灵框架具有原点,大小和位置的属性 . 假设你的精灵底部有一个钩子,靠近原点 . 当您知道发生了联系时,您只需计算 contact.contactPoint 与您的精灵点之间的距离点,以了解最短距离是什么,因此您的钓鱼线中涉及此接触的部分是什么 .

    func getDistance(p1:CGPoint,p2:CGPoint)->CGFloat {
        let xDist = (p2.x - p1.x)
        let yDist = (p2.y - p1.y)
        return CGFloat(sqrt((xDist * xDist) + (yDist * yDist)))
    }
    

相关问题