2017-03-18 27 views
3

我想讓我的「單詞」浮在屏幕上;恆速,無衝擊,無重力,無摩擦。除了這個詞變慢以外,一切都有效。SKSpriteNode減速,但不應該

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 
} 

我打電話之類的函數:

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

爲什麼字減慢任何想法

創建字碼? 謝謝。

回答

0

它看起來像你正在創建一個對象,不需要在物理模擬中。因此,您可能需要重新考慮簡單地刪除與物理相關的代碼並手動更新節點position

這就是說,如果你希望這個節點留在物理模擬。在開始嘗試修改屬性之前,您需要將SKPhysicsBody添加到SKSpriteNode。例如

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 
+0

謝謝。那樣做了。在添加到節點後,我改變了psysicsbody參數,就像你所建議的那樣,並且它工作得很完美。非常感激。 –

+0

優秀@MatthewLittle,如果你能接受那將是偉大的答案。謝謝 – cocojoe

0

我和sprite一起工作了一下。但是,我不是專家。它的工作原理爲您使用的行動,而不是速度,例如以下:

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

一件事太指出。你爲什麼使用applyImpulse。速度應該足夠了。你嘗試刪除它嗎?

+0

感謝您的回覆。我會提出你的建議。我還沒有嘗試過一個動作,因爲我想讓它在屏幕上移動,然後在它離開屏幕後重新出現在它開始的位置。在我看來,一個永不放慢的浮動節點可以工作。接下來我會嘗試行動。至於應用脈衝,只是試圖解決我的問題,並添加我能找到的任何想法。 –