简体   繁体   English

生成随机颜色并将其分配给对象

[英]Generating Random Color and Assigning it to object

I want to make Obstacle_Color = random color instead of blackcolor . 我想使Obstacle_Color = random color而不是blackcolor I found random color implementation but couldn't merge `Obstacle_Color with the return val of rand method. 我找到了随机的颜色实现,但是无法将`Obstacle_Color与rand方法的返回值合并。 Thanks in advance! 提前致谢!

import Foundation
import SpriteKit

class AKObstacle: SKSpriteNode {

    let Obstacle_Width: CGFloat = 40.0
    let Obstacle_Height: CGFloat = 70.0
    let Obstacle_Color = UIColor.blackColor()

    init(){

        let size = CGSizeMake(Obstacle_Width, Obstacle_Height)
        super.init(texture: nil, color: Obstacle_Color, size: size)

        loadPhysicsBoadyWithSize(size)
        startMoving()

    }

func getRandomColor() -> UIColor{

    var randomRed:CGFloat = CGFloat(drand48())

    var randomGreen:CGFloat = CGFloat(drand48())

    var randomBlue:CGFloat = CGFloat(drand48())

    return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)

}

One solution would be to make get randomcolor a static function and call it as a class method. 一种解决方案是将getrandomcolor设为静态函数,并将其称为类方法。 Another one (probably better, since that function doesn't seem to be specifically linked to that class) is to make it a public method. 另一个(可能更好,因为该函数似乎没有专门链接到该类)可能是使其成为一个公共方法。 Also someone else suggested to call it in the constructor, which also works. 也有人建议在构造函数中调用它,这也有效。

Solution 1 解决方案1

import UIKit
import Foundation
import SpriteKit

class AKObstacle: SKSpriteNode {

    let Obstacle_Width: CGFloat = 40.0
    let Obstacle_Height: CGFloat = 70.0
    let Obstacle_Color = AKObstacle.getRandomColor()

    init() { ... }

    static func getRandomColor() -> UIColor {

        var randomRed:CGFloat = CGFloat(drand48())

        var randomGreen:CGFloat = CGFloat(drand48())

        var randomBlue:CGFloat = CGFloat(drand48())

        return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
    }
}

Solution 2 解决方案2

import UIKit
import Foundation
import SpriteKit

class AKObstacle: SKSpriteNode {

    let Obstacle_Width: CGFloat = 40.0
    let Obstacle_Height: CGFloat = 70.0
    let Obstacle_Color = getRandomColor()

    init() {...}

}

public func getRandomColor() -> UIColor {

    var randomRed:CGFloat = CGFloat(drand48())

    var randomGreen:CGFloat = CGFloat(drand48())

    var randomBlue:CGFloat = CGFloat(drand48())

    return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
}

你可以说

super.init(texture: nil, color: getRandomColor(), size: size)

You can't use self before super.init call. super.init调用之前不能使用self You can implement an extension of UIColor class 您可以实现UIColor类的扩展

class MyClass: SKSpriteNode {

    let Obstacle_Width: CGFloat = 40.0
    let Obstacle_Height: CGFloat = 70.0

    init(){

        let size = CGSizeMake(Obstacle_Width, Obstacle_Height)

        super.init(texture: nil, color: UIColor.Obstacle_Color(), size: size)

    }
}

extension UIColor{

    class func Obstacle_Color() -> UIColor {

        var randomRed:CGFloat = CGFloat(drand48())

        var randomGreen:CGFloat = CGFloat(drand48())

        var randomBlue:CGFloat = CGFloat(drand48())

        return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM