我目前正在快速学习,而且我遇到了一些困难。 在我的游戏中,随机背景颜色每次都会变为红绿色和蓝色之间的随机颜色。
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还没有太多的编程知识。所以,如果有人能帮我解决这个问题,那就太好了!