如何将我的 starsSqArray
添加到我的更新函数中的 for 循环中,该循环获取所有 SKSpriteNodesfor
_starsSq1
以便所有星星一起移动而不是分开移动?
现在我的 Swift 类一直返回一个错误,指出 _starsSqArray
没有位置(我的代码被窃听了)。我的目标是捕获绘制的星星并同时向下移动它们。
import SpriteKit
class Stars:SKNode {
//Images
var _starsSq1:SKSpriteNode?
//Variables
var starSqArray = Array<SKSpriteNode>()
var _starSpeed1:Float = 5;
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init() {
super.init()
println("stars plotted")
createStarPlot()
}
/*-------------------------------------
## MARK: Update
-------------------------------------*/
func update() {
for (var i = 0; i < starSqArray.count; i++) {
_starsSq1!.position = CGPoint(x: self.position.x , y: self.position.y + CGFloat(_starSpeed1))
}
}
/*-------------------------------------
## MARK: Create Star Plot
-------------------------------------*/
func createStarPlot() {
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
for (var i = 0; i < 150 ; i++) {
_starsSq1 = SKSpriteNode(imageNamed: "starSq1")
addChild(_starsSq1!)
//starSqArray.addChild(_starsSq1)
var x = arc4random_uniform(UInt32(screenSize.width + 400))
var y = arc4random_uniform(UInt32(screenSize.height + 400))
_starsSq1!.position = CGPoint(x: CGFloat(x), y: CGFloat(y))
}
}
}
最佳答案
从设计角度提出的一些建议:
- 您已经将所有星星(我猜是这样)分组到一个公共(public)父节点(您正确命名为 Stars)内。然后你只需要移动你的Stars类型的节点,它的所有子节点都会自动移动。
- 在更新方法中手动更改节点的坐标确实有效,但(恕我直言)这不是移动它的最佳方式。您应该改用 SKAction。
所以,如果你想以共同的速度和方向永远移动星星,你可以将这个方法添加到 Stars
func moveForever() {
let distance = 500 // change this value as you prefer
let seconds : NSTimeInterval = 5 // change this value as you prefer
let direction = CGVector(dx: 0, dy: distance)
let move = SKAction.moveBy(direction, duration: seconds)
let moveForever = SKAction.repeatActionForever(move)
self.runAction(moveForever)
}
现在您可以删除更新方法中的代码,并在您希望星星开始移动时调用 moveForever。
最后,星星会在某个时候离开屏幕。我不知道你想要达到的效果,但你需要处理这个问题。
关于ios - 添加数组以在 Swift : SpriteKit 的 for 循环中移动图像组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234983/