2015-04-07 2 views
0

Я пытаюсь получить «герой», чтобы столкнуться с «wallGenerator» (создает стены)Xcode Swift столкновение не работает

, но это не будет сталкиваться, независимо от того, что я делаю. Герой столкнется с землей, но не с стенами, поскольку он просто пройдет через них.

Вот код для героя и 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) 

} 

} 
+0

Вы можете предоставить некоторые дополнительные детали, такие как: как экземпляр 'hero', что делает' CSWallGenerator' делать, как ты написал свои битмаски (категории)? – lchamp

+0

@lchamp Я добавил CSWallGenerator, также кажется, что это только проблема с wallGenerator, потому что мой герой может столкнуться с моей землей. –

ответ

0

Вы устанавливаете тело физики для wallgenerator, но то, что на самом деле добавляется к сцене является cswall. У Cswall нет набора физических тел.

Попробуйте что-то вроде

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

Внутри вашей функции generateWall

+0

. Вы хотели, чтобы я добавил эту строку в файл CSWallGenerator под 'let wall = CSWall() wall .position.x = size.width/2 + wall.size.width/2 wall.position.y = масштаб * (kCSGroundHeight/2 + wall.size.height/2) ' –

+0

Это правильно? –

+0

Да, я сейчас не на своем компьютере, поэтому я не уверен, правильная ли строка кода, но вы поняли эту идею. Я думаю, вы настраиваете физическое тело на стеногенератор, а не на стену. –

Смежные вопросы