显示SpriteKit分SwiftUI看

0

的问题

我在尝试做一个完成,将复盖得分从我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()每一个时间一个小行星被摧毁。 我知道整可能会有帮助,但这是一个很大的代码。 我基本上是重建我的游戏,所以,用户界面是100%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ý
..................................................................................................................