Swift:如果SKNode颜色与背景颜色匹配

时间:2016-05-27 02:37:35

标签: swift background uicolor sknode

我目前正在快速学习,而且我遇到了一些困难。 在我的游戏中,随机背景颜色每次都会变为红绿色和蓝色之间的随机颜色。

arr = ["blue", "red", "green"];

getRandomChoice = function(arr) {
    var choice = arr[Math.floor(Math.random()*arr.length)];
    while (choice === "red") {
        choice = arr[Math.floor(Math.random()*arr.length)];
    }
    return choice;
}

getRandomChoice(arr)

它运作良好,但我知道它不是最好的做事方式。 游戏非常简单,一个物体可以穿过3面墙。一个绿色,一个红色,一个蓝色。但是,物体一次只能穿过一面墙,墙面颜色必须与背景颜色相匹配。

这是我尝试做的事情:

let colorgen = arc4random_uniform(3)+1

        if colorgen == 1{
        Col = UIColor.redColor()

        }
        else if colorgen == 2{
        Col = UIColor.greenColor()

        }
        else if colorgen == 3{
        Col = UIColor.blueColor()
        }

上面的代码在gamescene swift类

该效应应该将墙壁撞到不适当的位置(仅当物体撞到错误的颜色墙时,使其以启用的碰撞位掩模飞走)表示游戏结束。

如果被击中的背景颜色和墙壁不匹配(基本错误的墙壁被物体撞击/触碰),我只希望墙壁能够在被击中时被击倒。因此,这就是为什么我使用碰撞位掩码,以便当前匹配正确的墙仍然可以注册接触但对象直接通过它(将其设置为0)。我究竟想要它。

然而,collisionBitMask = 0似乎始终对所有墙都没有影响。

我的分段代码在另一个名为MovingGround的类中,并且是这样的:

    override func update(currentTime: CFTimeInterval) {
        if segment.color == self.backgroundColor{
segment.physicsBody?.collisionBitMask = 0
}

    }

当我尝试时,这很奇怪:

for i in 0 ..< NumberSeg {
            //NumberSeg = 3 So that means 3 walls on screen

            if i == 1{
                segmentColor = colorone
                //ColorX is just UIColors of Red Green and Blue

            }
            else if i == 2{
            segmentColor = colortwo

            }

            else{

                segmentColor = colorthree
            }
            segment = SKSpriteNode(color: segmentColor, size: CGSizeMake(self.size.width / CGFloat(NumberSeg), self.size.height))

            segment.anchorPoint = CGPointMake(0.5, 0.5)
            segment.position = CGPointMake(CGFloat(i)*segment.size.width+50, 0.5)
            addChild(segment)



            segment.physicsBody = SKPhysicsBody(rectangleOfSize:CGSizeMake(self.size.width/3,
                15))
            segment.physicsBody?.categoryBitMask = heroCategory
            segment.physicsBody?.contactTestBitMask = wallCategory
            segment.physicsBody?.affectedByGravity = false
            segment.physicsBody?.velocity = CGVectorMake(0, 0)
            segment.physicsBody?.usesPreciseCollisionDetection = true

if segment.color == UIColor.blueColor(){
segment.physicsBody?.collisionBitMask = 0
}

要测试它们是否单独工作,它们就可以了!

我只是不明白为什么如果我尝试将它们与嵌套的if语句或单个if与&amp;&amp;组合在一起操作员它不会工作!

我还应该提到我将段变量设为全局(至少我认为它应该做的是什么)将它放在常量(这是另一个单独的文件)swift类之外:

if self.backgroundColor == UIColor.blueColor(){
           segment.physicsBody?.collisionBitMask = 0 
       }

我14岁&amp;除了一点点Python之外,Swift还没有太多的编程知识。所以,如果有人能帮我解决这个问题,那就太好了!

0 个答案:

没有答案