SpriteKit摩擦似乎不能正常工作

时间:2015-09-22 01:32:31

标签: ios swift sprite-kit xcode7

在Xcode 7中的一个项目中,我有一些在屏幕上来回移动的SKSpriteNodes和另一个名为user的项目,它意味着从精灵跳转到精灵,逐渐向上移动屏幕。然而,当user落在其中一个移动的精灵上时,移动的精灵就会从它下方滑出,user会向下滑落。我认为这意味着我需要增加节点上的摩擦属性,以便user“坚持”到节点,但这只会让它在其他节点上反弹。我的问题是来回移动的节点似乎“滑”,user只是不留在它们上面。

这是我的代码:

我的user课程:

class UserNode: SKSpriteNode
{
    class func newNode(position position: CGPoint) -> UserNode
    {
        let position = position

        let sprite = UserNode(imageNamed: "userImage")
        sprite.position = position
        sprite.size = CGSize(width: sprite.size.width * 2, height: sprite.size.height * 2)
        sprite.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "userImage"), size: sprite.size)
        sprite.physicsBody?.affectedByGravity = true
        sprite.physicsBody?.dynamic = true
        sprite.physicsBody?.allowsRotation = false
        sprite.physicsBody?.friction = 0.2

        return sprite
    }
}

以及移动user(我gamescene中的方法)

let scale: CGFloat = 2.0
let damping: CGFloat = 0.98
var point = CGPoint?()

func moveNodeToPoint(sprite: SKSpriteNode, point: CGPoint)
{
    let dx = (point.x - sprite.position.x) * scale
    let dy = (point.y - sprite.position.y) * scale
    sprite.physicsBody?.velocity = CGVectorMake(dx, dy)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
    /* Called when a touch begins */
    for _: AnyObject in touches
    {
        if !welcomeNode.hidden
        {
            let fadeAway = SKAction.fadeOutWithDuration(0.3)

            welcomeNode.runAction(fadeAway)
            directionsNode.runAction(fadeAway)
            touchStartNode.runAction(fadeAway)

            welcomeNode.hidden = true
            directionsNode.hidden = true
            touchStartNode.hidden = true
        }

        //////////

        point = CGPointMake(self.frame.midX, user.position.y + 300)


    }
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
{
    point = nil
}

override func update(currentTime: CFTimeInterval)
{
    /* Called before each frame is rendered */

    if (point != nil)
    {
        moveNodeToPoint(user, point: point!)
    }
    else
    {
        let dx = user.physicsBody!.velocity.dx * damping
        let dy = user.physicsBody!.velocity.dy * damping

        user.physicsBody?.velocity = CGVectorMake(dx, dy)
    }



}

并且用于移动平台:

let screenSize = UIScreen.mainScreen().bounds
let width = screenSize.size.width * 2
let firstAction = SKAction.moveBy(CGVector(dx: width, dy: 0), duration: 2)
let secondAction = SKAction.moveBy(CGVector(dx: -width, dy: 0), duration: 2)

let actions = [firstAction, secondAction]
let barAction = SKAction.sequence(actions)
let mainBarAction = SKAction.repeatActionForever(barAction)

platform.runAction(mainBarAction)

0 个答案:

没有答案