2015-12-25 42 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

相关问题