【发布时间】:2017-06-12 17:42:22
【问题描述】:
代码将存储 x1 和 y1 变量,但一旦 touchesEnded 函数开始,它们就会恢复到原来的 0.0 值。我希望这些值在 touchesBegan 函数结束后保留。如何存储这些值?
var x1: CGFloat = 0.0
var y1: CGFloat = 0.0
var x2: CGFloat = 0.0
var y2: CGFloat = 0.0
//touch initialized
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
var x1 = location.x
var y1 = location.y
print(x1,y1)
}
}
//touch ends
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
print(x1,y1)
let location2 = touch.location(in: self)
let x2 = location2.x
let y2 = location2.y
let originX = min(x1,x2)
let originY = min(y1,y2)
let cornerX = max(x1,x2)
let cornerY = max(y1,y2)
let boxWidth = cornerX - originX
let boxHeight = cornerY - originY
let box = SKSpriteNode()
box.size = CGSize(width: boxWidth, height: boxHeight)
box.color = SKColor.black
box.position = CGPoint(x:originX, y: originY)
addChild(box)
print(x1,y1,x2,y2)
}
}
【问题讨论】:
-
为什么不声明 2 个变量 CGPoints 而不是 4 个 CGFloats?
-
顺便说一句,您应该更改您的问题标题,因为您并没有尝试将属性设置为 GLOBAL。您想使用其方法更改您的类属性
-
@Leo 从他的角度来看,他正试图使全球化,所以我认为标题是正确的。我认为他没有意识到变量可以具有本地、类或全局范围,并且他想要一个类属性而不是真正的全局变量。
-
你没有看我对你其他问题的回答吗?它已经有类变量
-
我建议使用单例模式,它将这些值存储在可以从项目中的任何位置访问的设置类中,并保证只有一个设置对象实例,因此只有一个设置对象实例其中的值在内存中。
标签: swift sprite-kit 2d 2d-games