问题描述
我们正在尝试为我们正在创建的游戏创建一个充电站,当玩家与充电器发生碰撞时,该充电站会增加。为此,我们为播放器创建了一个类别,并为充电器创建了一个类别。在我们的 didBegin 函数中,它在发生碰撞时被激活,如下所示,健康(这是一个全局变量)增加,并且充电设置为 true。为了确保玩家停止与充电器碰撞后健康不会继续增加,我们有一个 didEnd 函数,仅在碰撞不再发生时才会发生。这会将收费变量设置为 false。在我们的更新函数中,我们有条件语句来说明如果收费是真还是假,我们的代码应该发生什么。当它为真时,生命值会增加一点,并且不会高于 1 或低于零以使其保持在界限内。当它为 false 时,健康会减少一点,并且也不会高于 1 或低于零以使其保持在界限内。我们遇到的问题是当玩家第一次与充电器碰撞时,充电变量设置为true,但只要它移动一点,即使它仍然与充电器碰撞,变量也会设置为假,它不再收费。我们是否遗漏了什么/是否有更好的方法来设置充电站?
let chargerCategory: UInt32 = 0b1000 //6 if charge is in contact with player,then increase
func didBegin(_ contact: SKPhysicsContact) {
var body1 = SKPhysicsBody()
var body2 = SKPhysicsBody()
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
body1 = contact.bodyA
body2 = contact.bodyB
}
else{
body1 = contact.bodyB
body2 = contact.bodyA
}
if body1.categoryBitMask == playerCategory && body2.categoryBitMask == chargerCategory{
//if player hit charger
//health += 0.001
//HealthBar.xScale = health
print("CHARGING...",health)
charging = true
}
func didEnd(_ contact: SKPhysicsContact) {
var body1 = SKPhysicsBody()
var body2 = SKPhysicsBody()
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
body1 = contact.bodyA
body2 = contact.bodyB
}
else{
body1 = contact.bodyB
body2 = contact.bodyA
}
if body1.categoryBitMask == playerCategory && body2.categoryBitMask == chargerCategory{
charging = false
}
}
override func update(_ currentTime: TimeInterval) {
if charging == false{
health -= 0.0001
HealthBar.xScale = health
if health < 0 {
health = 0
}
if health > 1.0{
health = 1.0
}
}
if charging == true{
health += 0.001
HealthBar.xScale = health
// print("CHARGING...",health)
if health < 0 {
health = 0
}
if health > 1.0{
health = 1.0
}
}
print(health)
print(charging)
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)