基于随机着色比较两种精灵颜色?

时间:2016-06-17 05:43:13

标签: swift if-statement collision-detection uicolor color-detection

此代码将我的球着色。

var colorize1 = SKAction.colorizeWithColor(.redColor(), colorBlendFactor: 1.0, duration: 0.3)

        var colorize2 = SKAction.colorizeWithColor(.greenColor(), colorBlendFactor: 1.0, duration: 0.3)

        var colorize3 = SKAction.colorizeWithColor(.blueColor(), colorBlendFactor: 1.0, duration: 0.3)

        var actions = [colorize1, colorize2, colorize3]

        var randomIndex = Int(arc4random_uniform(3))

        var action = actions[randomIndex]

        let seconds = 0.14
        let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
        let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

        dispatch_after(dispatchTime, dispatch_get_main_queue(), {


            self.Ball.runAction(action)


        })

    }

此代码为我的墙壁着色。

var colorBucket = [UIColor]()

func randomColor() -> UIColor {

    if colorBucket.isEmpty {
        fillBucket()
    }

    let randomIndex = Int(arc4random_uniform(UInt32(colorBucket.count)))
    let randomColor = colorBucket[randomIndex]
    colorBucket.removeAtIndex(randomIndex)
    return randomColor

}

func fillBucket() {
    colorBucket = [UIColor.redColor(), UIColor.greenColor(), UIColor.blueColor()]
}

当我与位于墙壁之间的spritekitnode()碰撞时,我需要编写一个if语句来检测球和墙是否是相同的颜色。

我试过这些:

if Wall1.color == UIColor.redColor() && Wall2.color == UIColor.redColor() && Ball.color != UIColor.redColor {

died = true

}

我的主要问题是编写if语句,确定球和墙是否是相同的颜色。我把碰撞部分放下了。 非常感谢你的帮助。

func didBeginContact(contact: SKPhysicsContact) {


    let firstBody = contact.bodyA
    let secondBody = contact.bodyB




    let ballWasContacted = firstBody.categoryBitMask == PhysicsCat.Ball || secondBody.categoryBitMask == PhysicsCat.Ball
    var wallWasContacted = firstBody.categoryBitMask == PhysicsCat.Wall || secondBody.categoryBitMask == PhysicsCat.Wall
    let scoreWasContacted = firstBody.categoryBitMask == PhysicsCat.Score || secondBody.categoryBitMask == PhysicsCat.Score
    let colorWasContacted = firstBody.categoryBitMask == PhysicsCat.Color || secondBody.categoryBitMask == PhysicsCat.Ball

    if ballWasContacted {
        if scoreWasContacted {
            score += 1
            scoreLbl.text = "\(score)"
            let scoreNode = firstBody.categoryBitMask == PhysicsCat.Score ? firstBody.node : secondBody.node
            scoreNode!.removeFromParent()
        } else if wallWasContacted {
            enumerateChildNodesWithName("wallPair", usingBlock: ({
                (node, error) in
                node.speed = 0
                self.removeAllActions()

                                }))


            if died == false {
                died = true
                createBTN()
                fallDie()
            }
        }
    }

    else if colorWasContacted {


    }

}

目前还没有真正使用colorWasContacted,但其他一切都是。

改变墙壁颜色的代码。

action = SKAction.colorizeWithColor(randomColor(), colorBlendFactor: 1.0, duration: 0.3)

Wall1.runAction(动作)

这是我添加断点时发生的事情。

Breakpoints

2 个答案:

答案 0 :(得分:1)

联系人一次只能使用两个元素,因此您可以在didBeginContact中执行以下操作(根据您的实际代码进行编辑):

...
else if wallWasContacted {
    let sprite1 = firstBody.node as! SKSpriteNode
    let sprite2 = secondBody.node as! SKSpriteNode
    if sprite1.color.isEqual(sprite2.color) {
        // Whatever your heart desires...
    } else {
       // Something else you'd like to have done...
    }

    enumerateChildNodesWithName("wallPair", usingBlock: ({
        (node, error) in
        node.speed = 0
        self.removeAllActions()
    }))

    if died == false {
        died = true
        createBTN()
        fallDie()
    }
}

由于这可能对这个孤立的问题有所帮助,我相信(通过查看其他线程),当发现在墙之间传递时,需要重新思考整个逻辑......

答案 1 :(得分:0)

当你正在混淆问题并重新提问时(措辞略有不同)我也会在这里尝试处理你的色彩问题,因为这很可能是你失败的地方。我说很可能是,因为你提供的代码并没有告诉我们你在所有的墙上着色。

它告诉我们:

  1. 你有适当的逻辑来改变球上的颜色。
  2. 你有逻辑从colorBucket中挑选一个随机颜色。
  3. 当有所有颜色时,你有逻辑来重新装满水桶 使用。
  4. 告诉我们您实际更改了墙壁的颜色信息。你能否提供这部分代码(如果存在的话)。