• Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

SpriteKit and SwiftUI

를 사용하기로 결정… 이제 튜토리얼 시간!

SpriteKit을 SpriteView를 사용해서 SwiftUI에서 사용하기

출처

import SpriteKit
import SwiftUI
class GameScene: SKScene {
	override func didMove(to view: SKView) {
    physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
  }
  
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else { return }
    let location = touch.location(in: self)
    
    let box = SKSpriteNode(color: .red, size: CGSize(width: 50, height: 50))
    box.position = location
    box.physicsBody = SKPhysicsBody(rectangleOF: CGSize(width: 50, height: 50))
    addChild(box) // 오브젝트 뷰에 추가
  }
}

요런 식으로 따로 SKScene을 만든 후에, ContentView의 body에서 보여주는 방식이다.

struct ContentView: View {
  var scene: SKScene { // scene 생성
    let scene = GameScene()
    scene.size = CGSize(width: 300, height: 400)
    scene.scaleMode = .fill
    return scene
  }
  
  var body: some View {
    SpriteView(scene: scene) // SpriteView 사용
    	.frame(width: 300, height: 400)
  }
}

이렇게 body에서 SpriteView를 사용해 scene을 넘겨줘서 보여주면

image

요런 식으로 ..! (검은 화면 아무데나 클릭하면 박스가 만들어지고, 아래로 떨어져서 쌓이는 형태)

SKScene

출처

위에서 SKScene이라는 클래스를 만들어서 뷰에 붙여줘야 한다는 내용은 이제 알겠으니까,,
이제 SKScene에 대해서 공부해보자!

SKScene : 뷰 컨트롤러 위에 올라갈 화면을 만드는 클래스

  • 초기화
    • init()
    • sceneDidLoad()
    • didMove(to:)
    • 셋중하나 택1 (별 차이 크게 없음, 기본 프로젝트에서는 didMove 사용)
  • 콜백함수
    • update(_:)
    • didBegin(_:)
    • touchesBegan, Moved, Ended, Cancelled(_:with:)
  • scaleMode (실물기기 = 파란 사각형)
    • image

아 그래서 위에서 .fill(비율무시)을 줬군,,~!!

  • node : 화면에 보여지는 개체의 개수
  • fps : 화면을 1초에 몇 번 갱신하는지
  • .sks 파일 : 게임 화면