2016-03-22 1 views
0

Ich mache mein erstes Spiel, auf dem Bild ist der Spieler einer der Rand eines Blocks, die linke Seite des Blocks ist leicht gebogen und die rechte ist gerade (I weiß nicht, ob das wichtig ist - aber scheint einen Unterschied zu machenSprite Kit (swift) Knoten Reibung - Bildschirm springen

Wenn die Ebene ganz links ist, springt der Bildschirm auf und ab, als wäre der Spieler verwirrt, an welchen Teil des Blocks er angehängt ist .

Ich versuche zu bewegen, aber der Spieler ist fest (es sei denn, ich springe) dies geschieht auch auf der rechten Seite des Blocks, aber der Bildschirm springt nicht wie rechts (muss die Kurve sein?).

Ich nehme an, dass es etwas mit Reibung zu tun hat, aber die Reibung für den Block wird als Null gesetzt.

Wie behebe ich das? Hier

ist die Klasse für den Block:

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 
    } 
} 

Dies ist ein Teil der Klasse für den Spieler:

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

Dank.

+0

Was passiert, wenn Sie Dämpfung ausschalten und die Masse Eigenschaft entfernen? Ich würde dort anfangen und sehen, ob dein Ergebnis besser ist. – mfessenden

+0

Ich habe diese entfernt - er fliegt jetzt in die Luft, wenn ich spring! - Also gibt es keine speziellen Funktionen, um das zu beheben? Ich muss nur mit den Zahlen rumspielen? – garyconstable

+0

Ich würde die 'physicsBody.applyImpulse' -Eigenschaft verwenden, um ein positives Y-Delta anzuwenden und seine' physicsBody.dynamic' -Eigenschaft auf true zu setzen. – mfessenden

Antwort

1

Masse und Dämpfung können für Zeichen problematisch sein. Hier ist, wie ich Ihren Player Dynamik für das Springen einrichten würde:

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 

Wenn der Spieler springt, gilt einen Impuls an die physicsBody:

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

Danke, ich werde es versuchen - obwohl das Problem ist nicht so viel springt, wenn er immer noch auf der Ecke des Blocks steht. der Bildschirm wackelt (wenn das Sinn macht!);) – garyconstable

+0

Diese Einstellungen sollten den Wobble-Effekt beseitigen ... viel Glück! – mfessenden

+0

Ja, das hat ziemlich gut funktioniert, alles auf 0 zurückgesetzt, eine kleine Menge Masse hinzugefügt und die Menge an Impulsen angepasst, jetzt ist das Wackeln weg, danke. – garyconstable