Sprite Kit(swift)节点摩擦 - 屏幕跳跃

时间:2016-03-22 13:35:45

标签: sprite-kit swift2

我正在制作我的第一个游戏,在图片中,玩家是一个块的边缘,块的左侧略微弯曲,右侧是直的(我不知道是否重要 - 但似乎有所作为)

当图层位于最左侧位置时,屏幕会上下跳动,就好像玩家对其所连接的块的哪个部分感到困惑一样。

我尝试移动但是玩家被卡住了(除非我跳了)这也发生在块的右边,但屏幕不会像右边一样跳(必须是曲线?)。

我认为它与摩擦有关,但是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
    }
}

这是玩家课程的一部分:

    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

感谢。

1 个答案:

答案 0 :(得分: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))