Swift:如何为 SKSpriteNodes 保留容量()
Swift: how to reserveCapacity() for SKSpriteNodes
我正在尝试使用精灵的预设索引将精灵数据分配给全局数组。我将数组初始化为 SKSpriteNodes 数组。我将 SKSpriteNodes 发送到这个数组,每个精灵都有这个数组的集合索引。我意识到我也可以用循环而不是设置索引来做到这一点,但我想先弄清楚数组分配。
我已经尝试过 reserveCapacity(27) 因为将有 27 个 sprite 传入,但是当我尝试时我得到一个索引超出范围的错误。
class GameScene: SKScene
{
//main array that will be used to store sprite button data
var mainArr: [SKSpriteNode] = [SKSpriteNode]()
..
override func didMove(to view: SKView)
{
mainArr.reserveCapacity(27)
...
if let name = touchedNode.name
{
if name == "pea"
{
peaFlag = peaFlag * -1
manageArrayData(name: pea, nameFlag: peaFlag, nameIndex: peaInd)/*may need to add images*/
}
...}//end touchNode
...} //end didMoveTo
func manageArrayData(name: SKSpriteNode, nameFlag: Int, nameIndex: Int)
{
if nameFlag >= 0
{
print(nameFlag)
print(nameIndex)
print("in array")
mainArr.insert(name, at: nameIndex)
//dump(mainArr)
print("-=-=-=-in-=-=-=-")
}
如我所说,错误是:致命错误:数组索引超出范围
2019-06-27 09:54:09.414271-0700 Select[36307:1432579] 致命错误:数组索引超出范围
我认为错误是因为 reserveCapacity() 是 Int 类型,而我正在尝试为 SKSpriteNode 分配内存...因此我正在分配的内容没有 space,因此 "out of range"
有多个 "buttons"(使用 SKSpriteNode),所以我为按钮创建了一个 if 树。
reserveCapacity
不会在数组中创建条目。如果您添加那么多条目,它只是确保您不需要执行重新分配(和可能的重定位)。通常仅出于性能原因才需要它。它不会改变索引的工作方式。
如果您希望数组中有空条目,则需要添加它们。请参阅 Array(repeating:count:)
创建具有一些固定值的数组。
我正在尝试使用精灵的预设索引将精灵数据分配给全局数组。我将数组初始化为 SKSpriteNodes 数组。我将 SKSpriteNodes 发送到这个数组,每个精灵都有这个数组的集合索引。我意识到我也可以用循环而不是设置索引来做到这一点,但我想先弄清楚数组分配。
我已经尝试过 reserveCapacity(27) 因为将有 27 个 sprite 传入,但是当我尝试时我得到一个索引超出范围的错误。
class GameScene: SKScene
{
//main array that will be used to store sprite button data
var mainArr: [SKSpriteNode] = [SKSpriteNode]()
..
override func didMove(to view: SKView)
{
mainArr.reserveCapacity(27)
...
if let name = touchedNode.name
{
if name == "pea"
{
peaFlag = peaFlag * -1
manageArrayData(name: pea, nameFlag: peaFlag, nameIndex: peaInd)/*may need to add images*/
}
...}//end touchNode
...} //end didMoveTo
func manageArrayData(name: SKSpriteNode, nameFlag: Int, nameIndex: Int)
{
if nameFlag >= 0
{
print(nameFlag)
print(nameIndex)
print("in array")
mainArr.insert(name, at: nameIndex)
//dump(mainArr)
print("-=-=-=-in-=-=-=-")
}
如我所说,错误是:致命错误:数组索引超出范围 2019-06-27 09:54:09.414271-0700 Select[36307:1432579] 致命错误:数组索引超出范围
我认为错误是因为 reserveCapacity() 是 Int 类型,而我正在尝试为 SKSpriteNode 分配内存...因此我正在分配的内容没有 space,因此 "out of range"
有多个 "buttons"(使用 SKSpriteNode),所以我为按钮创建了一个 if 树。
reserveCapacity
不会在数组中创建条目。如果您添加那么多条目,它只是确保您不需要执行重新分配(和可能的重定位)。通常仅出于性能原因才需要它。它不会改变索引的工作方式。
如果您希望数组中有空条目,则需要添加它们。请参阅 Array(repeating:count:)
创建具有一些固定值的数组。