2015-12-25 43 views
2

當我調用我的didbegincontact函數時,此函數應該通過增加寬度來增加我的蛇的大小。但是當聯繫人發出聯繫時,它會調用該功能一次,然後再也不會再調用它。我不知道爲什麼,當接觸時不保留通過增量在swift中調用函數時出現問題

增加我的蛇大小
func increaseSnakeSize(increment: CGFloat){ 

    snake.snake1.size = CGSizeMake(snake.size.width + increment, snake.size.height + increment) 
    snake.snake2.size = CGSizeMake(snake.size.width + increment, snake.size.height + increment) 
    snake.snake3.size = CGSizeMake(snake.size.width + increment, snake.size.height + increment) 
    print(snake.snake1.size) 
} 

// didBeginContact

if (firstBody.categoryBitMask & physicsCategory.snakeCategory == 0b1) && (secondBody.categoryBitMask & physicsCategory.foodCategory == 0b10){ 

    score++ 
    scoreLabel.text = "\(score)" 
    food.removeFromParent() 
    addFood() 
    increaseSnakeSize(2) 
} 
+0

你可以更清楚地說明你的問題。 'increaseSnakeSize'只需調用一個,大小是否增加?下一次它不會打電話? –

+1

除非您對第一個和第二個物體進行了排序(按categoryBitMask),否則您需要檢查firstBody是否是食物,secondBody是否是蛇。 – 0x141E

+1

更改精靈的大小不會更改其物理主體的大小。每當蛇長大時,您都需要創建一個新的更大的物理體。 – 0x141E

回答

0

當初始接觸時,蛇長到22x22,但其物理體的大小保持在20x20。一種解決方案是創建一個新的物理身體是22×22的初次接觸,24x24的下一個,爲26x26爲以後的接觸,...例如,

func increaseSnakeSize (increment: CGFloat) { 
    snake.snake1.size = CGSizeMake(snake.size.width + increment, snake.size.height + increment) 
    // Create a new, larger physics body that matches the size of the snake 
    snake.snake1.physicsBody = SKPhysicsBody(circleOfRadius:snake.size.width/2.0) 
    // Configure the physics body's property accordingly 
    snake.snake1.physicsBody?.affectedByGravity = false 
    ... 
} 

另一個潛在問題是contact.bodyA順序和contact.bodyB可以在聯繫人之間切換。你需要檢查蛇是否是第一個身體,食物是第二個,食物是第一個身體蛇是第二個身體。這裏有一個例子

func didBeginContact (contact: SKPhysicsContact) { 

    var firstBody, secondBody: SKPhysicsBody! 

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if (firstBody.categoryBitMask == physicsCategory.snakeCategory) && (secondBody.categoryBitMask == physicsCategory.foodCategory) { 
     // Increase size of the snake 

    } 

let bitMask = contact.BodyA.categoryBitMask | contact.BodyB.categoryBitMask 

    if bitMask == physicsCategory.snakeCategory | physicsCategory.foodCategory { 
     // Increase size of the snake 
    } 
0

看起來你不增加你的蛇的PhysicsBody。你的應用程序中是否有物理盒子?如果不是,我會建議打開它們並看看它的行爲。在您的查看代碼中,請執行以下操作:self.showsPhysics = true

+0

我不太明白你要我添加self.showPhysics = true – user3856516

+0

你應該有一些類來處理你的SKView代碼,在那個初始化 – Knight0fDragon

相關問題