我想为我的游戏创建一个包含游戏级别对象信息的数组。但是我仍然坚持用这个信息创建一个适当的数组,以便稍后在循环中运行这个数组,在加载这个级别时放置所有的游戏对象。
这是我的阵列:
let level1 =
[
(
id: 1,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
)
]
let level2 =
[
(
id: 1,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
),
(
id: 2,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
)
]这是我的负载级功能:
func loadLevel(levelNumber: Int = 1) {
var level = [[String:AnyObject]]()
switch(levelNumber) {
case 1:
level = level1 //Cannot assign a value of type '[(id: Int, position: CGPoint, impulse: CGVector)]' to a value of type '[([String: AnyObject])]'
case 2:
level = level2 //Cannot assign a value of type '[(id: Int, position: CGPoint, impulse: CGVector)]' to a value of type '[([String: AnyObject])]'
case 3:
level = level3 //Cannot assign a value of type '[(id: Int, position: CGPoint, impulse: CGVector)]' to a value of type '[([String: AnyObject])]'
default:
level = level1 //Cannot assign a value of type '[(id: Int, position: CGPoint, impulse: CGVector)]' to a value of type '[([String: AnyObject])]'
}
for s in level {
var newShip = Ship(ship: ships[s.id! - 1], position: s.position)
self.addChild(newShip)
ship.physicsBody?.applyImpulse(s.impulse)
}
}我甚至不知道这是否是保存/编辑级别对象信息的好方法。
当我使用:
var level = [id:Int, position:CGPoint, impulse:CGVector]() //Use of unresolved identifier 'id'发布于 2015-08-16 12:01:28
level变量的类型错误。这不是一堆字典。它是一个名为元组的数组。尝试像这样声明level:
var level:[(id: Int, position: CGPoint, impulse: CGVector)]如果将所有级别放入一个大数组中,则可以使用数组索引访问每个级别,而不需要一个大开关语句。我建议在声明数组时告诉Swift数组的类型:
let levels: [[(id: Int, position: CGPoint, impulse: CGVector)]] = [
// level 1
[
(
id: 1,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
)
],
// level 2
[
(
id: 1,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
),
(
id: 2,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
)
]
]
func loadLevel(levelNumber: Int = 1) {
// Subtract 1 since array indices start at 0. This will crash with Array
// index out of range if the level doesn't exist. Take proper precautions.
let level = levels[levelNumber - 1]
for s in level {
var newShip = Ship(ship: ships[s.id - 1], position: s.position)
self.addChild(newShip)
ship.physicsBody?.applyImpulse(s.impulse)
}
}或者,您可以使levels成为一个级别编号为key的字典。
let levels: [Int:[(id: Int, position: CGPoint, impulse: CGVector)]] = [
// level 1
1: [
(
id: 1,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
)
],
// level 2
2: [
(
id: 1,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
),
(
id: 2,
position: CGPointMake(0.5, 0.8),
impulse: CGVectorMake(-40, 0)
)
]
]
func loadLevel(levelNumber: Int = 1) {
// Unwrap the level information. This will crash if it isn't a valid
// level number. Take proper precautions.
let level = levels[levelNumber]!
for s in level {
var newShip = Ship(ship: ships[s.id - 1], position: s.position)
self.addChild(newShip)
ship.physicsBody?.applyImpulse(s.impulse)
}
}https://stackoverflow.com/questions/32034729
复制相似问题