ios - 如何从 swift 中的一系列 Sprite 中进行选择

标签 ios arrays swift

所以基本上我希望随机选择 4 个不同颜色的球之一进入场景,每个球都有我已经编码的动画、物理属性以及运动和间距。我不确定如何制作阵列,然后从 4 个彩色球的阵列中随机选择以便我随机选择一个球进入场景。 为了更清楚地说明我要问的是一些代码(我在此代码中只使用了两个球,因此您不必阅读那么多):

var moveandremove = SKAction() <这是在我的 ballScene.swift 中

spawn runBlock 在 didMovetoView 中

让 spawn = SKAction.runBlock({ () 在

        self.allballs()

    })

    let delay = SKAction.waitForDuration(2.0)
    let SpawnDelay = SKAction.sequence([spawn, delay])
    let spawndelayforever = SKAction.repeatActionForever(SpawnDelay)
    self.runAction(spawndelayforever)

    let distance = CGFloat(brnball.frame.width * 20 + brnball.frame.width)
    let moveball = SKAction.moveByX(-distance, y: 0, duration: NSTimeInterval(0.003 * distance))
    let removeball = SKAction.removeFromParent()
    moveandremove = SKAction.sequence([moveball])

}


func allballs() {

    TextureAtlasblk = SKTextureAtlas(named: "blkball")

    for i in 1...TextureAtlasblk.textureNames.count{

        var Name = "blkball_\(i)"
        blkarray.append(SKTexture(imageNamed: Name))
    }

    blkball = SKSpriteNode(imageNamed: "blkball_1")
    blkball.position = CGPoint(x: CGRectGetMidX(self.frame) + 100, y: CGRectGetMidY(self.frame))
    blkball.zPosition = 7
    blkball.setScale(0.1)

    self.addChild(blkball)

    blkball.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(blkarray, timePerFrame: 0.2)))

    //brownball

    TextureAtlasbrn = SKTextureAtlas(named: "brnball")

    for i in 1...TextureAtlasbrn.textureNames.count{

        var Name = "brnball_\(i)"
        brnarray.append(SKTexture(imageNamed: Name))
    }

    brnball = SKSpriteNode(imageNamed: "brnball_1")
    brnball.position = CGPoint(x: CGRectGetMidX(self.frame) + 50, y: CGRectGetMidY(self.frame))
    brnball.zPosition = 7
    brnball.setScale(0.1)

    self.addChild(brnball)

    brnball.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(brnarray, timePerFrame: 0.2)))

这是我试图制作一个数组以从每个球中进行选择的糟糕起点(这是在我的 allballs() 函数中):

var ballarray: NSMutableArray = [blkball, brnball, yelball, bluball]

    runAction(moveandremove)

我是 swift 的新手,非常绝望,如果有人能帮助我,那就太棒了:)

谢谢

最佳答案

我很难在代码中找到您所说的数组。尽管如此,我仍然可以向您展示如何操作。

假设我们有一个[Int]:

let ints = [10, 50, 95, 48, 77]

我们想从该数组中随机选择一个元素。

您可能已经知道,您可以使用带有元素索引的下标运算符来访问数组中的元素,例如ints[2] 返回 95。所以如果你给下标一个随机索引,就会返回数组中的一个随机项!

让我们看看如何生成随机数。

arc4random_uniform 函数返回一个介于 0 和参数减一之间的均匀分布的随机数。请注意,此函数将 UInt32 作为参数,并且返回值是同一类型。所以你需要做一些转换:

let randomNumber = Int(arc4random_uniform(UInt32(ints.count)))

使用randomNumber,我们可以访问数组中的随机元素:

let randomItem = ints[randomNumber]

尝试将此技术应用于您的情况。

还有一个通用的方法可以做到这一点:

func randomItemInArray<T> (array: [T]) -> T? {
    if array.isEmpty {
        return nil
    }

    let randomNumber = Int(arc4random_uniform(UInt32(array.count)))
    return array[randomNumber]
}

注意,如果传入的数组为空,则返回nil

关于ios - 如何从 swift 中的一系列 Sprite 中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731912/

相关文章:

ruby-on-rails - 从哈希数组中获取键值数组?

swift - 如何将Alamofire生成的数据从tableview推送到webview

ios - 如何从 UIViewController 获取 CLASS

ios - 如何从推送通知跳转到复杂 Storyboard 中的任意场景?

ios - 用户声称 iOS 应用程序导致其他 iOS 应用程序关闭?那是一回事吗?

ios - Google Cast 新 session 未启动 swift ios

C:判断数组内部是否存在指针并打印以下项目

ios - 无法将条形按钮项目添加到 Xcode 中的导航 Controller

arrays - 如何将图像数组传递给 detailView Swift?

iOS 9 (Xcode 7) Facebook API/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKAccessToken.o)' 不包含位码