【发布时间】:2017-03-21 21:57:09
【问题描述】:
我有 3 组精灵 (EnemyGroups),这些组按特定顺序排列(每组延迟一秒)。请看代码:
敌人组:
struct EnemyGroup {
var enemies : [Enemy]
var isVisible : Bool
var isStatic : Bool
func setup () {
if isStatic {
for enemy in enemies {
enemy.sprite.alpha = 1.0
enemy.sprite.isUserInteractionEnabled = false
}
isVisible = true
}
}
mutating func switchEnemiesON () {
if !isStatic {
for enemy in enemies {
enemy.sprite.alpha = 1.0
enemy.sprite.physicsBody?.categoryBitMask = enemyCategory
enemy.sprite.physicsBody?.collisionBitMask = bombCategory
}
isVisible = true
}
}
mutating func switchEnemiesOFF () {
if !isStatic {
for enemy in enemies {
enemy.sprite.alpha = 0.0
enemy.sprite.physicsBody?.collisionBitMask = 0
enemy.sprite.physicsBody?.categoryBitMask = 0
}
isVisible = false
}
}
在游戏场景中:
func groupActionSequence (enemyGroup: EnemyGroup) {
for enemy in enemyGroup.enemies {
var enemyGroupWithAction = enemyGroup
let groupSequence = SKAction.sequence([
SKAction.run({ enemyGroupWithAction.switchEnemiesON() }),
SKAction.wait(forDuration: showTime),
SKAction.run({ enemyGroupWithAction.switchEnemiesOFF() }),
SKAction.wait(forDuration: hideTime)
])
let repeatGroupAction = SKAction.repeatForever(groupSequence)
enemy.sprite.run(repeatGroupAction)
}
}
func groupActionSequenceWithDelay (delayTime: TimeInterval, enemyGroup: EnemyGroup, groupKey: String) {
for enemy in enemyGroup.enemies {
var group = enemyGroup
let groupSequence = SKAction.sequence([
SKAction.run({ group.setup() }),
SKAction.wait(forDuration: delayTime),
SKAction.run({ self.groupActionSequence(enemyGroup: enemyGroup) })
])
enemy.sprite.run(groupSequence, withKey: groupKey)
}
}
为敌方团体设置行动:
groupActionSequenceWithDelay(delayTime: 0, enemyGroup: enemyGroup1, groupKey: "group1")
groupActionSequenceWithDelay(delayTime: 1, enemyGroup: enemyGroup2, groupKey: "group2")
groupActionSequenceWithDelay(delayTime: 2, enemyGroup: enemyGroup3, groupKey: "group3")
我将enemyGroup1 和enemyGroup2 设置为将isStatic = false 和enemyGroup3 设置为isStatic = true。
我将enemyGroup1 和enemyGroup2 isStatic 更改为true,这些操作仍在enemyGroup1 和enemyGroup2 as ifisStatic = false. How can I getswitchEnemiesOFF()andswitchEnemiesON()@9876543 上运行?
另外,我不想停止动作,因为我想保持每个组的相同序列在它们的运行动作中具有一秒钟的差异,这就是为什么我用 if 语句来保护一些函数。
【问题讨论】:
标签: swift swift3 sprite-kit skaction