Swift、SpriteKit 和带有 CGPoint 的多维数组

Posted

技术标签:

【中文标题】Swift、SpriteKit 和带有 CGPoint 的多维数组【英文标题】:Swift, SpriteKit and multidimensional arrays with CGPoint 【发布时间】:2014-08-14 15:08:12 【问题描述】:

SKSpriteNode 派生类的属性中使用带有CGPoint 的多维数组时出现错误。 仅在这些情况下。

错误是:

EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

我尝试使用 double → 工作 我尝试使用 CGPoint 作为函数内部的变量 → 工作 我尝试了使用不是从 SKSpriteNode 派生的类的失败代码 → 工作

Xcode 6.0 测试版 2

有什么想法吗?


这是我的测试代码:

import SpriteKit

class TestSprite: SKSpriteNode 
   
    var myOuterArray = Array<Array<CGPoint>>()
    var myOuterDoubleArray = Array<Array<Double>>()
    
    init()  
        super.init(texture:nil, color:UIColor.clearColor(), size: CGSizeZero)
        self.testWithInnerArray()
        self.testWithOuterArray()
        self.testWithOuterDoubleArray()
    
    
    // breaks
    func testWithOuterArray()
        myOuterArray.append(Array(count:1, repeatedValue:CGPoint())) // << ERROR!
        println("myOuterArray.count : \(myOuterArray.count)")
    

    // works
    func testWithOuterDoubleArray()
        myOuterDoubleArray.append(Array(count:1, repeatedValue:Double()))
        println("myOuterDoubleArray.count : \(myOuterDoubleArray.count)")
    
    
    // works
    func testWithInnerArray()
        var myInnerArray = Array<Array<CGPoint>>()
        myInnerArray.append(Array(count:1, repeatedValue:CGPoint()))
        println("myInnerArray.count : \(myInnerArray.count)")
    

【问题讨论】:

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode =0x0) on Swift when working with multi-dimensional arrays的可能重复 您的代码对我来说很好用。我相信这是一个 Swift 编译器错误。 我刚刚验证了 ios 8、Seed 3 (Build 12A4318c) 上的步骤。我仍然可以遇到这个问题。你运行代码@pasta12 了吗? 我在操场上试过,但对我也不起作用。只有你说的testWithOuterArray()函数。 Runtime error when using CoreFoundation objects in a swift NSObject subclass的可能重复 【参考方案1】:

它已在 Xcode 的更高版本中修复。问题不再出现。

【讨论】:

以上是关于Swift、SpriteKit 和带有 CGPoint 的多维数组的主要内容,如果未能解决你的问题,请参考以下文章

将 AcceptMouseMovedEvents 用于带有 Storyboard 和 Swift 的 SpriteKit 鼠标操作

如何使用 swift 使用带有 spriteKit 的情节提要

在 SpriteKit Swift 2 中切换场景

Swift/SpriteKit - ApplyImpluse 的速度是不是以增量方式工作(每次都添加到先前的值)?

iOS Swift SpriteKit:如何使子精灵节点的位置和动作与其父精灵节点相同?

Swift SpriteKit:创建逼真的 2D 驾驶体验