这个问题似乎很容易,但我无法找到答案,我的搜索字词似乎是通用的,无法从网上获得答案 - 希望SO可以提供帮助:
我已在 swift 中创建了一系列SKSpriteNode
个对象:
var images:[SKSpriteNode] = [];
我添加了一些节点:
images+=[SKSpriteNode(imageNamed: "StarrySky")];
images+=[SKSpriteNode(imageNamed: "StarrySky")];
images+=[SKSpriteNode(imageNamed: "StarrySky")];
images+=[SKSpriteNode(imageNamed: "StarrySky")];
现在,当我访问SKSpriteNode
的方法时,我得到了不一致的结果:
images[0].position
例如:
func moveBackground(direction: CGVector) {
//works
let origin = images[0].position;
var newPoint = CGPoint(x: origin.x + direction.dx, y: origin.y + direction.dy);
positionBackground(newPoint);
//next line has a compilation error.
positionBackground(images[0].position + direction);
}
有时它会起作用,有时xCode会说Could not find member position
。我认为数组没有成员position
,而不是SKSpriteNode
。
我知道如何指定它是数组本身中对象的方法而不是数组吗?
答案 0 :(得分:1)
错误消息"找不到会员位置"是误导和问题 与存储在数组中的精灵节点无关。
问题是您要添加CGPoint
和CGVector
:
images[0].position + direction
CGPoint--^ CGVector--^
并且Swift没有+
运算符,它将(CGPoint, CGVector)
作为参数。
您的其他代码
let origin = images[0].position
var newPoint = CGPoint(x: origin.x + direction.dx, y: origin.y + direction.dy)
positionBackground(newPoint)
有效,因为您可以按组件方式添加点和向量,即调用+
具有CGFloat
参数的运算符。
如果您希望将其缩短为
positionBackground(images[0].position + direction)
然后您必须定义自定义+
运算符:
func +(lhs: CGPoint, rhs: CGVector) -> CGPoint {
return CGPoint(x: lhs.x + rhs.dx, y: lhs.y + rhs.dy)
}