循环我的代码,以便用户可以继续播放

时间:2017-10-21 20:23:13

标签: swift sprite-kit

enter image description here

import SpriteKit
import GameplayKit

class GameScene: SKScene, SKPhysicsContactDelegate {


let balls = [
    SKSpriteNode(imageNamed: "blueball.png"),
    SKSpriteNode(imageNamed: "greenball.png"),
    SKSpriteNode(imageNamed: "realredball.png"),
    ]
let redRectangle = SKSpriteNode(imageNamed: "redrectangle.png")
let blueRectangle = SKSpriteNode(imageNamed: "bluerectangle.png")
let greenRectangle = SKSpriteNode(imageNamed: "greenrectangle.png")
let wall1 = SKSpriteNode(imageNamed: "drop_wall.png")
let wall2 = SKSpriteNode(imageNamed: "drop_wall.png")
let bottom = SKSpriteNode(imageNamed:"drop_bottom.png")
let top = SKSpriteNode(imageNamed:"drop_bottom.png")

let blueBallCategory :UInt32 = 0x1 << 0
let greenBallCategory :UInt32 = 0x1 << 1
let realRedBallCategory :UInt32 = 0x1 << 2
let redRectangleCategory : UInt32 = 0x1 << 3
let blueRectangleCategory : UInt32 = 0x1 << 4
let greenRectangleCategory : UInt32 = 0x1 << 5


override func didMove(to view: SKView) {
    spawnBalls()
    spawnRectangles()
    physicsWorld.contactDelegate = self
    moveRectangles()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for ball in balls{
        ball.isUserInteractionEnabled = false
    }

    physics()
       }
func didBegin(_ contact: SKPhysicsContact) {




    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask


    switch contactMask {

    case blueBallCategory | blueRectangleCategory:
      for ball in balls{
            ball.removeFromParent()





       }




        print("Alive! Blue ball has hit blue rectangle.")

    case greenBallCategory | greenRectangleCategory:

        print("Alive! Green ball has hit green rectangle.")

    case realRedBallCategory | redRectangleCategory:

        print("Alive! Red ball has hit red rectangle.")

    case blueBallCategory | redRectangleCategory:

        print("dead")

    case blueBallCategory | greenRectangleCategory:

        print("dead")

    case realRedBallCategory | blueRectangleCategory:

        print("dead")

    case realRedBallCategory | greenRectangleCategory:

       print("dead")

    case greenBallCategory | redRectangleCategory:

       print("dead")

    case greenBallCategory | blueRectangleCategory:

       print("dead")

    default:

        print("missed")
    }



}

func spawnRectangles() {

    redRectangle.position = CGPoint(x: 0, y: -400)
    redRectangle.size = CGSize(width: 200, height: 20)
    blueRectangle.position = CGPoint(x: -300, y: -200)
    blueRectangle.size = CGSize(width: 200, height: 20)
    greenRectangle.position = CGPoint(x: 100, y: -550)
    greenRectangle.size = CGSize(width: 200, height: 20)
    self.addChild(redRectangle)
    self.addChild(blueRectangle)
    self.addChild(greenRectangle)
    wall1.position = CGPoint(x: -367.04, y: 0)
    wall1.size = CGSize(width: 20, height: 1350)
    wall1.physicsBody = SKPhysicsBody(rectangleOf: wall1.size)
    wall1.physicsBody?.isDynamic = false
    wall1.physicsBody?.affectedByGravity = false
    self.addChild(wall1)
    wall2.position = CGPoint(x: 367.04, y: 0)
    wall2.size = CGSize(width: 20, height: 1350)
    wall2.physicsBody = SKPhysicsBody(rectangleOf: wall2.size)
    wall2.physicsBody?.isDynamic = false
    wall2.physicsBody?.affectedByGravity = false
    self.addChild(wall2)
    top.position = CGPoint(x: 0, y: 657)
    top.size = CGSize(width: 765, height: 20)
    top.physicsBody = SKPhysicsBody(rectangleOf: top.size)
    top.physicsBody?.isDynamic = false
    top.physicsBody?.affectedByGravity = false
    self.addChild(top)
    bottom.size = CGSize(width: 765, height: 20)
    bottom.position = CGPoint(x: 0, y: -657)
    bottom.physicsBody = SKPhysicsBody(rectangleOf: bottom.size)
    bottom.physicsBody?.isDynamic = false
    bottom.physicsBody?.affectedByGravity = false
    self.addChild(bottom)

}
func physics(){
    for ball in balls{
        ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.height/2)
        ball.physicsBody?.contactTestBitMask = blueRectangleCategory | greenRectangleCategory | redRectangleCategory
               }
    redRectangle.physicsBody = SKPhysicsBody(rectangleOf: redRectangle.size)
    redRectangle.physicsBody?.affectedByGravity = false
    redRectangle.physicsBody?.isDynamic = false
    blueRectangle.physicsBody = SKPhysicsBody(rectangleOf: redRectangle.size)
    blueRectangle.physicsBody?.affectedByGravity = false
    blueRectangle.physicsBody?.isDynamic = false
    greenRectangle.physicsBody = SKPhysicsBody(rectangleOf: redRectangle.size)
    greenRectangle.physicsBody?.isDynamic = false
    greenRectangle.physicsBody?.affectedByGravity = false
    balls[0].physicsBody?.categoryBitMask = blueBallCategory
    balls[1].physicsBody?.categoryBitMask = greenBallCategory
    balls[2].physicsBody?.categoryBitMask = realRedBallCategory
    redRectangle.physicsBody?.categoryBitMask = redRectangleCategory
    blueRectangle.physicsBody?.categoryBitMask = blueRectangleCategory
    greenRectangle.physicsBody?.categoryBitMask = greenRectangleCategory

            }
func moveRectangles(){
    let redMoveRight = SKAction.moveTo(x: 300, duration: 2)
    let redMoveLeft = SKAction.moveTo(x: -280, duration: 2)
    let redWholeMovement = SKAction.repeatForever(SKAction.sequence([redMoveRight,redMoveLeft]))
    redRectangle.run(redWholeMovement)
    let blueMoveRight = SKAction.moveTo(x: 300, duration: 2)
    let blueMoveLeft = SKAction.moveTo(x: -280, duration: 1.5)
    let blueWholeMovement = SKAction.repeatForever(SKAction.sequence([blueMoveRight,blueMoveLeft]))
    blueRectangle.run(blueWholeMovement)
    let greenMoveRight = SKAction.moveTo(x: 300, duration: 2)
    let greenMoveLeft = SKAction.moveTo(x: -280, duration: 1.5)
    let greenWholeMovement = SKAction.repeatForever(SKAction.sequence([greenMoveLeft,greenMoveRight]))
    greenRectangle.run(greenWholeMovement)






}
func spawnBalls(){
    let ball = balls[Int(arc4random_uniform(UInt32(balls.count)))]
    ball.position = CGPoint(x: 0, y: 250)
    ball.size = CGSize(width: 70, height: 70)
    self.addChild(ball)
}

}

如果一个球击中同一个彩色矩形,我想在屏幕顶部产生一个新球。现在,当我运行应用程序时,在顶部产生随机颜色的球,当用户点击球落下时。如果球与球的相同颜色的移动矩形接触,则游戏应继续进行。但它只是结束了。如果有人能提供帮助那就太棒了。谢谢!

1 个答案:

答案 0 :(得分:0)

你只在spawnBalls()中产生一个球。所以当你触摸时只出现一个球。您应该尝试将spawnBalls()移动到touchesBegan()。