2016-06-21 38 views
0

我正在尝试创建类似于涂鸦跳跃的练习。实现游戏对象的特定跳跃行为

对于那些不了解比赛的人;你有一个玩家在砖块上跳跃,这些砖块位于随机的地方,如果他们在他的上方,那么他们就不会与它们发生碰撞,并且只要他们落在他们身上就会跳跃。

我有麻烦实现原始涂鸦跳线的跳跃行为,下面解释。

我已经为玩家和砖块设置了碰撞位掩码为none。每当玩家登陆砖块(当'didBeginContact'被触发时,玩家在砖块上方),我对玩家施加冲动,但是因为碰撞被检测到不止一次,冲动真的非常大,玩家跳跃真的很高(我希望他的速度有限)。

我想这(当检测到碰撞时,这个函数被调用):

func playerCollidedWithBrick(brick: Brick) { 
    if player.position.y > brick.position.y && brick.physicsBody?.velocity.dy <= 0 { 
     //the player is above the brick and is falling 
     player.physicsBody?.applyImpulse(CGVectorMake(0, 20)) 
    } 
} 

但随后玩家不会比他跳下第一跳一个其他的砖 - 不是我想要的。

我希望他跳起任何他登陆的砖块,但速度有限。我也喜欢对他施加冲动的效果 - 当他着陆在砖上时有点像春天的效果。

我怎么能做到这一点?任何想法或建议表示赞赏。

回答

1

你为什么不把自定义属性在你的砖类,指定玩家是否已经打的砖

var playerHitBrick: Bool = false 

func playerCollidedWithBrick(brick: Brick) { 
    if player.position.y > brick.position.y && brick.physicsBody?.velocity.dy <= 0 && !brick.playerHitBrick { 
     //the player is above the brick and is falling 
     brick.playerHitBrick = true 
     brick.runAction(SKAction.waitForDuration(1.0), completion: { brick.playerHitBrick = false }) 
     player.physicsBody?.applyImpulse(CGVectorMake(0, 20)) 
    } 
} 

这种方式,将触发第一次玩家击中一块砖,但当玩家离开砖时不会计算随后的命中数

+0

因为玩家应该再次跳过那块砖以防他没有着陆任何其他砖 – Larisa

+0

我添加了一行可以在1秒后重置砖的线使它有可能再次登陆 –