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
Dzięki.
Odpowiedzi:
1 dla odpowiedzi № 1Masowanie 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))