2016-03-22 8 views
0

私は最初の試合をしています、プレーヤーのブロックは1つです。ブロックの左側が少し湾曲していて、右はまっすぐですそれが重要かどうか分かりません)スプライトキット(スウィフト)ノード摩擦 - 画面ジャンプ

レイヤーが左の位置にあるとき、プレイヤーがブロックのどの部分に接続されているかについて混乱しているかのように画面が上下にジャンプします。

私は移動しようとしますが、プレイヤーはスタックしています(ジャンプしない限り)これはブロックの右側でも発生しますが、画面は右のようにジャンプしません(曲線でなければならないのですか?)。

私は摩擦と関係があると仮定しますが、ブロックの摩擦はゼロに設定されています。

これを修正するにはどうすればよいですか?ここで

は、ブロックのためのクラスです:

import SpriteKit 

class Tile: SKSpriteNode 
{ 
    var textureAtlas:SKTextureAtlas = SKTextureAtlas(named:"Tiles.atlas") 

    func spawn(parentNode:SKNode, position:CGPoint, size:CGSize = CGSize(width: 48, height: 48), texture_id: Int = 1) 
    { 
    parentNode.addChild(self) 

    self.size = size 
    self.position = position 
    self.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: self.size.width, height: self.size.height)) 
    self.physicsBody?.affectedByGravity = false; 
    self.physicsBody?.dynamic=false 
    //self.physicsBody?.friction = 0 
    self.texture = textureAtlas.textureNamed("\(texture_id).png"); 

    if texture_id == 17 { 
     //self.physicsBody?.friction = 0; 
     self.physicsBody?.categoryBitMask = PhysicsCategory.ground.rawValue 
    } 
} 

これはプレーヤーのためのクラスの一部である:

self.physicsBody?.linearDamping = 1.0 
    self.physicsBody?.mass = 84 
    self.physicsBody?.allowsRotation = false 
    self.physicsBody?.categoryBitMask = PhysicsCategory.penguin.rawValue 
    self.physicsBody?.contactTestBitMask = PhysicsCategory.enemy.rawValue 

enter image description here

感謝。

+0

何がダンピングオフにして、マスプロパティを削除する場合はどうなりますか?私はそこから始まり、あなたの結果がより良いかどうかを見ます。 – mfessenden

+0

私はそれらを取り除いた - 私はジャンプすると、彼は今空中に飛ぶ! - これを修正する特別な機能はありませんか?私は数字で遊ぶだけですか? – garyconstable

+0

'physicsBody.applyImpulse'プロパティを使用して、正のYデルタを適用し、彼の' physicsBody.dynamic'プロパティをtrueに設定します。 – mfessenden

答えて

1

質量と減衰は文字に問題があります。ここで私はジャンプのためにあなたのプレーヤーのダイナミクスを設定する手順は次のとおりです:

プレイヤーはジャンプ
physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.size.width, self.size.height)) 
physicsBody?.dynamic = true 
physicsBody?.allowsRotation = false 
physicsBody?.restitution = 0.0 
physicsBody?.friction = 0.0 
physicsBody?.angularDamping = 0.0 
physicsBody?.linearDamping = 0.0 
physicsBody?.affectedByGravity = true 

physicsBodyにインパルスを適用します。

physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 50.0)) 
+0

ありがとう、私はそれを行くだろう - しかし、彼はブロックの角にまだ立っているときに問題はあまり飛び跳ねることはありません。画面の種類のウォブル(もし意味があれば!);) – garyconstable

+0

これらの設定はウォブル効果をなくすはずです...幸運! – mfessenden

+0

これはかなりうまくいきました。すべて0に戻し、少量の質量を追加してインパルスの量を調整しました。今はうねりがなくなりました。 – garyconstable

関連する問題