【问题标题】:Swift SpriteKit Gravity PointSwift SpriteKit 重力点
【发布时间】:2014-12-10 13:34:06
【问题描述】:

我需要在 Swift 中制作类似 Gravity Point 的东西。 SpriteNode 位于屏幕中间,通过左右手势可以沿 x 轴移动。

但是在例如之后'RightSwipe',它应该回到他的起点。你可以说它应该看起来像沿 x 轴的跳跃。

世界重力不可能是一个特定的点,那我怎么能“强迫”它回到原来的点呢?

我用 SKFieldNode 的 RadialGravityField 试过了,但是在 Nodes 脉冲产生之后,它又回到了他的原点并消失了。 我怎样才能避免这种情况?

我的代码:

{ 
.......

Node = SKSpriteNode(texture: Node1)
Node.size = CGSize(width: 100, height: 140)
Node.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 4)
Node.zPosition = 3
Node.runAction(RunAnimation)

Node.physicsBody = SKPhysicsBody(rectangleOfSize: Node.size)
Node.physicsBody?.dynamic = true
Node.physicsBody?.allowsRotation = false
Node.physicsBody?.usesPreciseCollisionDetection = true
Node.physicsBody?.restitution = 0
Node.physicsBody?.velocity = CGVectorMake(0, 0)

self.addChild(Node)

let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("SwipeRight:"))
swipeRight.direction = .Right
view.addGestureRecognizer(swipeRight)


let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("SwipeLeft:"))
swipeLeft.direction = .Left
view.addGestureRecognizer(swipeLeft)

}

func SwipeRight(recognizer:UISwipeGestureRecognizer) {

Node.physicsBody?.applyImpulse(CGVectorMake(10,0))

}

func SwipeLeft(recognizer:UISwipeGestureRecognizer) {

Node.physicsBody?.applyImpulse(CGVectorMake(-10,0))

}

override func update(currentTime: CFTimeInterval) {

if(Node.position.x > self.frame.size.width / 1.6)
    {
        fieldNode = SKFieldNode.radialGravityField()
        fieldNode.enabled = true
        fieldNode.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 4)
        fieldNode.strength = 0.4
        addChild(fieldNode)
    }

    if(Node.position.x < self.frame.size.width / 2.6)
    {
        fieldNode = SKFieldNode.radialGravityField()
        fieldNode.enabled = true
        fieldNode.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 4)
        fieldNode.strength = 0.4
        addChild(fieldNode)
    }

【问题讨论】:

    标签: ios swift sprite-kit game-physics


    【解决方案1】:

    听起来像是径向重力SKFieldNode 的工作。 link

    【讨论】:

    • 感谢您的帮助。我现在用径向重力而不是弹簧场尝试了它,并且在节点在他的原点之后,它就消失了。我添加了代码。
    • 我实现了你的代码,但是精灵太大了,当我滑动时它几乎没有移动。
    • 这里一样,只是消失了。
    • 我猜当它到达力场中心时,作用在那个物体上的力会达到无穷大,因为 f=strength/r^2 和 r=0,所以现在力 = 非常非常高,所以物体突然被置于无穷远
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多