[Swift]SpriteKit를 사용하여 충돌 판정을 받았습니다.

11221 단어 XcodeSwiftSpriteKit

그림 완성


규격.

  • 가운데에 빨간색 정사각형을 놓습니다.
  • 머리를 뽑는 위치에서 녹색 직사각형을 만들어 중력에 따라 떨어진다.
  • 빨간색 정사각형과 녹색 사각형이 충돌할 때 녹색 사각형을 제거한다.
  • ※ 아래는 대략적인 gif로 이해하기 어려울 수 있습니다.

    방법

  • "Game"을 선택하여 새 프로젝트 만들기
  • Game Technology에서 "SpriteKit"
  • 선택
  • GameScene.swift 다음과 같이 완료
  • GameScene.swift
    
    import SpriteKit
    
    class GameScene: SKScene, SKPhysicsContactDelegate {
    
        // カテゴリを用意しておく。
        let redCategory: UInt32 = 0x1 << 0
        let greenCategory: UInt32 = 0x1 << 1
    
        override func didMoveToView(view: SKView) {
    
            // デリゲートをselfにしておく。
            self.physicsWorld.contactDelegate = self
    
            self.size = view.bounds.size
            self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
            self.physicsWorld.gravity = CGVectorMake(0.0, -3.0)
    
    
            // 赤い正方形を真ん中に固定しておく。
            let redSquare = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(50, 50))
            redSquare.position = CGPoint(
                x: CGRectGetMidX(self.frame),
                y: CGRectGetMidY(self.frame)
            )
            redSquare.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(50, 50))
            redSquare.physicsBody.affectedByGravity = false
            redSquare.physicsBody.dynamic = false
    
            // カテゴリを設定する。
            redSquare.physicsBody.categoryBitMask = redCategory
            redSquare.physicsBody.contactTestBitMask = greenCategory
    
            self.addChild(redSquare)
        }
    
        override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    
            // タップする度に、その位置にグリーンの長方形を出す。
            for touch in touches {
    
                let location = touch.locationInNode(self)
                let greenRectangle = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(70, 50))
                greenRectangle.position = location
                greenRectangle.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(70, 50))
    
                // カテゴリを設定する。
                greenRectangle.physicsBody.categoryBitMask = greenCategory
                greenRectangle.physicsBody.contactTestBitMask = redCategory
    
                self.addChild(greenRectangle)
            }
    
        }
    
        override func update(currentTime: CFTimeInterval) {
        }
    
        // 衝突したとき。
        func didBeginContact(contact: SKPhysicsContact!) {
    
            var firstBody, secondBody: SKPhysicsBody
    
            // firstを赤、secondを緑とする。
            if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
                firstBody = contact.bodyA
                secondBody = contact.bodyB
            } else {
                firstBody = contact.bodyB
                secondBody = contact.bodyA
            }
    
            // 赤と緑が接したときの処理。
            if firstBody.categoryBitMask & redCategory != 0 &&
                secondBody.categoryBitMask & greenCategory != 0 {
                    secondBody.node.removeFromParent()
            }
        }
    }
    
    이상은 저의 영광입니다.

    좋은 웹페이지 즐겨찾기