쇼 SpriteKit 점수에 SwiftUI 보기

0

질문

내가 만들려고 노력 ZStack 는 것이 점수에서 내 SpriteKit 장면입니다. 나는 다음 코드는 지금,이 작품을 보여주는 코드에서 실제로 현장,그러나 내가 쇼에서 보기

import SwiftUI
import SpriteKit

var gameScore = 0

class GameScene: SKScene, SKPhysicsContactDelegate {

let removeLabel = SKAction.sequence([SKAction.fadeIn(withDuration: 0.3), SKAction.wait(forDuration: 0.8), SKAction.fadeOut(withDuration: 0.3)])

override func sceneDidLoad() {
    super.sceneDidLoad()
}

여기에서 기능:

// MARK: - Add Score
func addScore(){
    if gameScore < 250 {
        gameScore += 1
        scoreLabel.text = String(format: "%06d", gameScore)
        let possibleScores: Set = [10, 20, 30, 40, 50, 65, 80, 95, 110, 125, 150, 175, 200, 250]
        
        if possibleScores.contains(gameScore) {
            startNewLevel()
        }
    } else {
        gameScore += 2
        scoreLabel.text = String(format: "%06d", gameScore)
        let possibleScores: Set = [10, 20, 30, 40, 50, 65, 80, 95, 110, 125, 150, 175, 200, 250]
        
        if possibleScores.contains(gameScore) {
            startNewLevel()
        }
    }
}

내 코드는 다음과 같습니다:

import SwiftUI
import SpriteKit

struct PageTwo: View {

@State var gameScore = 0

var body: some View {
    ZStack {
        GameView()
        ZStack {
            Text("Score: \(gameScore)")
                .foregroundColor(.white)
      }
    }
  }
}

그것은 점수를 보여주는,하지만 계산 그래서 어쩌면 그것을 쉽게 확인할 수 있게 되었습니다 어디에 내가 잘못된 것까요? 이 SpriteKit+SwiftUI 은 새로운 저와 여전히 매우 그것을 얻었다.

sprite-kit swiftui
2021-11-23 16:22:40
1

최고의 응답

0

당신을 사용할 필요가 ObservableObject 와 게시자는 그것을 위해,나는 당신의 코드,거기에 몇 가지의 소스 코드를 누락된,지금까지 어떻게 그것은 예를 들어 당신을 위해:

class GameScene: SKScene, SKPhysicsContactDelegate, ObservableObject {  // <<: Here 1
    
    @Published var gameScore = 0 // <<: Here 2
    
    let removeLabel = SKAction.sequence([SKAction.fadeIn(withDuration: 0.3), SKAction.wait(forDuration: 0.8), SKAction.fadeOut(withDuration: 0.3)])
    
    override func sceneDidLoad() {
        super.sceneDidLoad()
    }
    
    func addScore(){
        if gameScore < 250 {
            gameScore += 1
            
        } else {
            gameScore += 2
            
        }
    }
    
}



struct PageTwo: View {
    
    @StateObject var gameScene: GameScene = GameScene() // <<: Here 3
    
    var body: some View {
        
        Text("Score: \(gameScene.gameScore)") // <<: Here 4
            .onTapGesture {
                gameScene.addScore()  // <<: Here 5
            }
        
    }
    
}
2021-11-23 17:10:39

불행하게도 변경하지 않은 아무것도 아니지만,나는 그것이 내게 가깝습니다. 그것은 그러나 무엇을 하고 있지 않은 계산합니다. 그것은 addScore()모든 시간이 소행성이 파괴된다. 나는 전체를 알 수 있는 것이 도움이지만,그것은 많은 코드입니다. 저는 기본적으로 재건을 내도록 게임 UI100%SwiftUI 고 논리 SpriteKit.
Norbert

당신은 노력하고 주어진 코드에 대답은? 그것은 나를 위해 작동합니다. 그것은,당신은 내가 말했듯이지에 액세스하는 전체 프로젝트 및 그 변경에 내 대답이다. 다른 방법은 없을 위해 당신에,모두가 내 대답이다. 방법은 사용하여 ObservableObject.
swiftPunk

나는 생각한 마지막 퍼즐 조각이다.onTapGesture 은 바로,발생하고 싶지 않 addScore()onTapGesture 지만,오히려할 때에 머리에 소행성. 의 나머지 부분의 코드 작동,원인은 나는 그것을 테스트 onAppear
Norbert

누가 사용해야 합니다 .onTapGesture 에서 귀하의 프로젝트! 그것은 예를 테스트하는 우리의 읽기/라이트 클래스! 왜 당신은 혼합하는 코드를 테스트와 함께 귀하의 프로젝트입니다. 아무 생각이 아니다! 귀하의 문제가 아 SwiftUI 또는 SpriteKit,배울 필요가 기본에서 처음! ps:에 대한 호출 기능 addScore() 할 때 호출할 수 있고 당신이 원하는 어느 곳,당신의 마지막 의견을 당신이 보여주는 기본적인 문제에서 코딩이다.
swiftPunk

나는 당신의 예제 코드를 테스트,그리고 일했다. 나는 그냥 알아내야 그것을 만드는 방법 개수가 이제 게임 논리에 swiftui.
Norbert

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................