ios - 添加数组以在 Swift : SpriteKit 的 for 循环中移动图像组

标签 ios arrays swift sprite-kit

如何将我的 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))
    }

}

}

最佳答案

从设计角度提出的一些建议:

  1. 您已经将所有星星(我猜是这样)分组到一个公共(public)父节点(您正确命名为 Stars)内。然后你只需要移动你的Stars类型的节点,它的所有子节点都会自动移动。
  2. 在更新方法中手动更改节点的坐标确实有效,但(恕我直言)这不是移动它的最佳方式。您应该改用 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/

相关文章:

ios - UITableView 在 vi​​ewForHeaderInSection 中居中一个 UIImage 和 UILabel

javascript - 如何用两个数组渲染 FlatList?

ios - 为登录用户触发 Segue

php - 数组插入mysql行

javascript - 使用 vanilla JS 删除 ES5 及以下版本数组中的重复数字的最快方法是什么?

swift - 无法将类型 'String' 的值转换为 'NSURL'

ios - 带有文本字段的 uitableviewcell 传递更改的数据

ios - 不使用 AppDelegate 获取 UIWindow

ios - 无法从放置在 GMSMapView 顶部的 UIButtons 接收触摸事件

ios - UIBezierPath 简单矩形