Zobraziť SpriteKit skóre v SwiftUI Zobraziť

0

Otázka

Snažím sa, aby ZStack, že bude prekrytie Skóre z môjho SpriteKit scény. Ja som dostal nasledujúci kód práve teraz, že to funguje, ukazuje kód v skutočnosti scénu, ale chcem ukázať, že v Okne

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()
}

Je tu funkcia:

// 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()
        }
    }
}

Môj Názor kód vyzerá takto:

import SwiftUI
import SpriteKit

struct PageTwo: View {

@State var gameScore = 0

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

To ukazuje, Skóre, ale nepočíta sa to, tak možno, že niekto môže mi povedať, kde som ti zle? Tento SpriteKit + SwiftUI je pre mňa niečo nové a stále nie je dosť, a dostal som to.

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

Najlepšiu odpoveď

0

Musíte použiť ObservableObject a vydavateľa za to, že som sa pozrel na svoje kódy, existuje nejaký kód zdroja chýba, ako vôbec nie je príkladom pre vás:

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

Bohužiaľ, ktoré nemali nič meniť, ale myslím, že to dostal ma bližšie. Čo to však nie je robiť, je počítanie skóre. To by addScore() každý čas asteroid je zničená. Viem, že celé mohlo by byť užitočné, ale je to veľa kód. Ja som v podstate prestavba moje hry tak, že UI je 100% SwiftUI a logika SpriteKit.
Norbert

Už ste vyskúšali môj uvedené kódy v odpovedi? funguje to pre mňa. A to je spôsob, ako pre vás, ako som povedal, nemám prístup k vašej plnej projekt a myslím, že to robí žiadna zmena v mojom odpoveďou. Neexistuje žiadny iný spôsob, ako pre vás, všetko je v mojej odpovedi. Spôsob je pomocou ObservableObject.
swiftPunk

Myslím, že posledný kúsok puzzle je, že .onTapGesture nie je správne, pretože nechcem, aby addScore() onTapGesture, ale skôr, keď sa guľka dotkne asteroid. Zvyšok kódu funguje, pretože som sa skúša to s onAppear
Norbert

Kto povedal, že by ste mali použiť .onTapGesture vo vašom projekte! To je príklad na test, ktorý môžeme čítať/wright do triedy! prečo ste miešanie testu, kód projektu. tušenie! Váš problém nie je SwiftUI alebo SpriteKit, musíte sa naučiť základné v prvý! ps: o volanie funkcie addScore() môžete volať, ak vôbec, a ak budete niekedy chcieť, váš posledný komentár ukazuje, máte základný problém v programovaní.
swiftPunk

Viem, že váš príklad je test kód, a ktorý pracoval. Ja len musím prísť na to, ako sa to počítať už teraz s hrou logika v swiftui.
Norbert

V iných jazykoch

Táto stránka je v iných jazykoch

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