/ / Sprite Kit (swift) friction węzła - skoki ekranu - sprite-kit, swift2

Sprite Kit (swift) friction węzła - skoki ekranu - sprite-kit, swift2

Robię swoją pierwszą grę, na zdjęciugracz jest jednym z brzegu bloku, lewa strona bloku jest lekko zakrzywiona, a prawa prosta (nie wiem, czy to ma znaczenie - ale wydaje się, że robi różnicę)

Gdy warstwa znajduje się w lewej pozycji, ekran przeskakuje w górę iw dół, tak jakby gracz był zdezorientowany, do której części bloku jest przymocowany.

Próbuję się ruszyć, ale gracz utknął (chyba, że ​​skaczę) to również dzieje się po prawej stronie bloku, ale ekran nie przeskakuje tak jak prawo (musi być krzywa?).

Zakładam, że ma to coś wspólnego z tarciem, ale tarcie dla bloku jest ustawione na zero.

Jak to naprawić?

Oto klasa dla bloku:

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

To jest część klasy dla gracza:

    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

wprowadź opis obrazu tutaj

Dzięki.

Odpowiedzi:

1 dla odpowiedzi № 1

Masowanie i tłumienie może być problematyczne dla postaci. Oto jak ustawić swoją dynamikę gracza do skakania:

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

Kiedy gracz skacze, zastosuj impuls do physicsBody:

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