3 votes

SKSpriteNode ralentit mais ne devrait pas le faire

J'essaie de faire flotter mon "mot" sur l'écran ; vitesse constante, pas d'impact, pas de gravité, pas de friction. Tout fonctionne, sauf que le mot ralentit.

Code pour créer un mot :

func createWordNode (word: String, atPos: CGPoint) -> SKSpriteNode {

    let doneSize = CGSize(width: 50, height: 50)

    let wordSprite = SKSpriteNode()
    wordSprite.size = CGSize(width: doneSize.width * CGFloat(word.len()), height: doneSize.height)
    wordSprite.position = atPos
    wordSprite.blendMode = .replace
    wordSprite.zPosition = zlvlBG + 1

    let ltrs = Array(word.uppercased().characters)

    for i in 0 ... ltrs.count - 1 {

        let done = SKSpriteNode(imageNamed: "LetterTiles/Tile" + String(ltrs[i]) + ".png")
        done.size = doneSize
        done.position = CGPoint(x: doneSize.width * CGFloat(Double(i) - 1.5), y: 0)
        done.blendMode = .replace
        done.zPosition = zlvlBG + 1

        wordSprite.addChild(done)

    }

    wordSprite.physicsBody?.restitution = 1
    wordSprite.physicsBody?.friction = 0
    wordSprite.physicsBody?.linearDamping = 0
    wordSprite.physicsBody?.angularDamping = 0
    wordSprite.physicsBody?.mass = 2000

    wordSprite.physicsBody = SKPhysicsBody(rectangleOf: wordSprite.size)
    wordSprite.physicsBody?.collisionBitMask = 0
    wordSprite.physicsBody?.contactTestBitMask = 0
    wordSprite.physicsBody?.categoryBitMask = categoryWords
    wordSprite.physicsBody?.fieldBitMask = 0

    wordSprite.physicsBody?.isDynamic = true
    wordSprite.physicsBody?.affectedByGravity = false
    wordSprite.physicsBody?.allowsRotation = false

    var velocity = CGVector()
    velocity.dx = 100
    velocity.dy = 0
    wordSprite.physicsBody?.velocity = velocity
    wordSprite.physicsBody?.applyImpulse(velocity)

    wordSprite.name = "Word:" + word

    return wordSprite
}

J'appelle la fonction comme ça :

addChild (createWordNode(word: "Done", atPos: CGPoint(x:-500, y:450)))

Une idée pour expliquer le ralentissement de Word ? Merci.

0voto

hasan Points 4225

J'ai travaillé un peu avec Sprite. Mais je ne suis pas un expert. Est-ce que cela fonctionne pour vous d'utiliser une action au lieu de la vélocité comme le suivant par exemple :

var moveRight = SKAction.moveTo(CGPointMake(400, 0), duration:2.0)
wordSprite.runAction(moveRight)

Une chose à signaler également. Pourquoi utilisez-vous applyImpulse . la vélocité devrait être suffisante. Avez-vous essayé de l'enlever ?

0voto

cocojoe Points 220

Il semble que vous créez un objet qui n'a pas besoin d'être dans la simulation physique. Vous pouvez donc envisager de supprimer simplement le code relatif à la physique et de mettre à jour les nœuds. position manuellement.

Ceci étant dit, si vous souhaitez que ce nœud reste dans la simulation physique. Vous devez ajouter l'élément SKPhysicsBody à la SKSpriteNode avant de commencer à essayer de modifier les propriétés. par ex.

wordSprite.physicsBody = SKPhysicsBody(rectangleOf: wordSprite.size)
wordSprite.physicsBody?.restitution = 1
wordSprite.physicsBody?.friction = 0
wordSprite.physicsBody?.linearDamping = 0
wordSprite.physicsBody?.angularDamping = 0
wordSprite.physicsBody?.mass = 2000

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X