Swift, SpriteKit로 진행률 표시줄 표시하기

10087 단어 SwiftSpriteKit

컨텐트


SKScene에 진행률 막대를 표시하는 방법 정보
(※ SpriteKit의 SKScene은 UIView Controller를 다중으로 계승할 수 없으며, UIProgressView를 사용할 수 없습니다. UIProgressView를 사용하지 않는 방법을 소개합니다)

그림 완성



이루어지다


(1) 항목에 이미지 쓰기
(이번에는 300입니다.×사용20)

(2) 진행률 막대 전용 클래스 만들기
Swift2.0
import SpriteKit

class ProgressBar: SKCropNode {

    override init() {
        super.init()

        let sprite = SKSpriteNode(imageNamed: "progressbar")
        sprite.anchorPoint = CGPoint(x: 0, y: 0)
        let maskSprite = SKSpriteNode(color: SKColor.blackColor(), size: sprite.size)
        maskSprite.anchorPoint = CGPoint(x: 0, y: 0)
        self.maskNode = maskSprite

        addChild(sprite)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // 初期値設定メソッド (0.0 〜 1.0)
    func setProgress(progress: CGFloat) {
        self.maskNode?.xScale = progress
    }

    // プログレスバーの数値を増やすメソッド
    func updateProgress(progress:CGFloat){
        self.maskNode?.xScale += progress
    }
}
(3) SKScene에 진행률 표시줄 추가
Swift2.0
import SpriteKit

// プログレスバー
let progressBar = ProgressBar()

class GameScene: SKScene{

    override func didMoveToView(view: SKView) {

        // プログレスバーを追加
        self.addChild(progressBar)
        progressBar.setProgress(0.0) // 初期値
        progressBar.position = CGPoint(x: 30, y: self.frame.height-40)
        progressBar.zPosition = 1 // 背景バーよりレイヤーを前に

        // プログレスバー(背景)を追加
        let backgroundBar = SKSpriteNode(color: UIColor.grayColor(), size: CGSizeMake(150, 10))
        backgroundBar.anchorPoint = CGPoint(x: 0, y: 0)
        backgroundBar.position = CGPoint(x: 30, y: self.frame.height-40)

        self.addChild(backgroundBar)
    }
}
(4) 진도표 증가 수치
체력 증감과 경험치 증가 타이밍 등에 사용한다.
Swift2.0
// 任意の場所で下記実行(引数に指定された数値分、加算される)
progressBar.updateProgress(0.1)
(5) SKScene을 표시하는 View 생성
Swift2.0
import UIKit
import SpriteKit

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = GameScene()
        let skView = self.view as! SKView
        scene.scaleMode = .AspectFill
        scene.size = skView.frame.size

        skView.presentScene(scene)
    }
}
방금 만들어졌기 때문에 리셋이 전혀 안 되지만, 먼저 위의 방법으로 SKScene에 진도표를 표시한다.

좋은 웹페이지 즐겨찾기