【发布时间】:2015-08-30 10:46:43
【问题描述】:
我正在开发一个简单的游戏,玩家通过收集硬币来提升关卡。玩家收集的每个硬币都会使它们在关卡中进一步移动。这是一张图片,可以更详细地解释它:
有两种不同的硬币 - 普通硬币和“特殊”硬币。普通硬币给他们一个正常的提升。特殊硬币应该给玩家一个暂时的额外提升。
特殊硬币总是可以在普通硬币组的中间找到(如图所示)。我的问题是,当用户击中一个特殊的硬币时,它只会给他们一瞬间的提升,因为他们最终几乎立即击中了一个普通的硬币。
我尝试了 3 种不同的选项,但都没有按我的计划工作。
选项 1 - (问题 - 一颗“特殊”星星会给他们瞬间提升,但当玩家接触到一颗普通星星时,几乎立即恢复到正常速度)
if starType == .Special {
player.physicsBody?.velocity = CGVector(dx: player.physicsBody!.velocity.dx, dy: 900.0)
}
else {
player.physicsBody?.velocity = CGVector(dx: player.physicsBody!.velocity.dx, dy: 500.0)
}
选项2-在触摸特殊星后使用SKAction延迟3秒,使其不会从常规星中读取任何内容(问题-同上)
if starType == .Special {
let wait = SKAction.waitForDuration(3)
let boost = SKAction.runBlock({
player.physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 80.0))
})
let action = SKAction.group([boost, wait])
player.runAction(action)
}
else {
player.physicsBody?.velocity = CGVector(dx: player.physicsBody!.velocity.dx, dy: 500.0)
}
选项 3 - 使用脉冲而不是设置新的速度。 (问题——每一次冲动都会叠加到最后一次,让玩家变得超级快,并在几秒钟内完成关卡)
if starType == .Special {
player.physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 90.0))
}
else {
player.physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 40.0))
}
任何关于更好实施的建议都会很棒。
谢谢
【问题讨论】:
-
使用选项 3,但要确保它们在 y 方向的速度不会太高。如果它太高,不要施加冲动,或施加较少的冲动。
-
@Kendel,非常感谢。这样可行!如此简单的解决方案!
-
没问题,我会抛出一个答案来帮助人们。