แสดง 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()ทุกเวลาเป็น asteroid นต้องถูกทำลาย ฉันรู้ว่าทั้งอาจจะต้องการความช่วยเหลือเหแต่มันเป็นมากมายนรหัสมอส ฉันก็สร้างมันใหม่อีกครั้งเกมส์ของผมดังนั้นนั่นคือส่วนติดต่อผู้ใช้ขอ 100%SwiftUI และตรรกะ SpriteKit.
Norbert

คุณพยายามของฉันให้รหัสในคำตอบอย่างนั้นหรอ? มันได้ผลสำหรับฉัน และมันคือหนทางเดียวสำหรับคุณเหมือนที่ฉันบอกว่าฉันทำไม่ได้ใช้งานของคุณเต็มไปด้วโครงการและฉันคิดว่ามันจะทำให้ไม่มีการเปลี่ยนแปลงในคำตอบของฉันเหมือนกัน มันไม่มีทางอื่นสำหรับคุณทุกอย่างเรียบร้อยในคำตอบของฉันแล้ว วิธีใช้ ObservableObject.
swiftPunk

ฉันคิดว่าสุดท้ายชิ้นส่วนของปริศนานั่น.onTapGesture มันไม่ใช่เพราะฉันไม่อยาก addScore()onTapGesture แต่ว่าตอนที่กระสุนที่ถูก asteroid. ที่เหลือของรหัสของคุณทำงาน,เพราะฉันทดสอบมันด้ว onAppear
Norbert

ใครบอกว่าอย่างนั้นคุณควรใช้ .onTapGesture ในโครงการของคุณ! มันเป็นตัวอย่างเช่นเพื่อทดสอบอกว่าเราสามารถอ่าน/ไรท์เข้าห้องเรียน! ทำไมคุณถึงต้องใส่...รากของรูเบอการทดสอบรหัสของโครงการ ไม่รู้หรอก! ปัญหาของคุณไม่ใช่ SwiftUI หรือ SpriteKit คุณต้องเรียนพื้นฐานในตอนแรก! à¡à§à¥:เรื่องโทรเรียกฟังก์ชันของ addScore() คุณสามารถโทรหาตอนที่ตั้งและที่ไหนที่คุณเคยต้องการสุดท้ายของคุณแสดงถึงความคิดเห็นคุณมีปัญหาพื้นฐานอยู่ในอาการหนัก
swiftPunk

ฉันรู้ว่าตัวอย่างของคุณมันทดสอบรหัสและนั่นทำงานอยู่ ฉันแค่ต้องหาวิธีที่จะทำอะไรก็ให้มันมีประโยชน์ตอนนี้กับเล่นเกมตรรกะใน swiftui.
Norbert

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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