【问题标题】:Xcode Swift Collision not workingXcode Swift 碰撞不工作
【发布时间】:2015-04-07 21:34:12
【问题描述】:

我试图让“英雄”与“wallGenerator”(生成墙壁)发生碰撞

但无论我做什么,它都不会发生碰撞。英雄会撞到地面,但不会撞到墙壁,因为它只会穿过墙壁。

这是 Hero 和 WallGenerator 的代码

    hero.position = CGPointMake(70, movingGround.position.y + movingGround.frame.size.height/2 + hero.frame.size.height/2)
    hero.physicsBody = SKPhysicsBody(rectangleOfSize: hero.size)
    hero.physicsBody!.dynamic = true
    hero.physicsBody!.allowsRotation = false
    hero.physicsBody!.categoryBitMask = heroCategory
    hero.physicsBody!.collisionBitMask = heroCategory | wallCategory
    hero.physicsBody!.contactTestBitMask = wallCategory | heroCategory | groundCategory

    wallGenerator = CSWallGenerator(color: UIColor.clearColor(), size: view.frame.size)
    wallGenerator.position = view.center
    wallGenerator.physicsBody = SKPhysicsBody(edgeLoopFromRect : wallGenerator.frame)
    wallGenerator.physicsBody!.dynamic = false
    wallGenerator.physicsBody!.categoryBitMask = wallCategory
    wallGenerator.physicsBody!.collisionBitMask = wallCategory | heroCategory

CSWallGenerator 的代码

class CSWallGenerator: SKSpriteNode {

var generationTimer: NSTimer?

func startGeneratingWallsEvery(seconds: NSTimeInterval) {
    generationTimer = NSTimer.scheduledTimerWithTimeInterval(seconds, target: self, selector: "generateWall", userInfo: nil, repeats: true)


}

func generateWall() {
    var scale: CGFloat
    let rand = arc4random_uniform(2)
    if rand == 0 {
        scale = -1.0
    } else {
        scale = 1.0
    }

    let wall = CSWall()
    wall.position.x = size.width/2 + wall.size.width/2
    wall.position.y = scale * (kCSGroundHeight/2 + wall.size.height/2)
    addChild(wall)

}

}

【问题讨论】:

  • 您可能想提供更多详细信息,例如:您如何实例化heroCSWallGenerator 做了什么,您是如何编写位掩码(类别)的?
  • @lchamp 我添加了 CSWallGenerator,这似乎只是 wallGenerator 的问题,因为我的英雄可以与我的地面发生碰撞

标签: ios swift sprite-kit skphysicsbody


【解决方案1】:

您正在为 wallgenerator 设置物理体,但实际添加到场景中的是 cswall。 Cswall 没有设置物理体。

试试类似的东西

wall.physicsBody = SKPhysicsBody(edgeLoopFromRect : wall.frame)

在您的 generateWall 函数中

【讨论】:

  • 您希望我将该行添加到 let wall = CSWall() wall.position.x = size.width/2 + wall.size.width/2 wall.position.y = scale * (kCSGroundHeight/2 + wall.size.height/2) 下的 CSWallGenerator 文件中
  • 是的,我现在不在我的电脑前,所以我不确定这行代码是否正确,但你明白了。我认为您将物理体设置为 wallgenerator 而不是 wall..
  • 这行得通,我必须将代码从 edgeloopfromrect 更改为 rectangleOfSize 才能让它在 cswallgenerator 中工作!感谢您的快速响应和帮助! :)
  • 酷。祝你的游戏好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2016-06-01
  • 1970-01-01
相关资源
最近更新 更多