Bet*_*ski 5 var scene sprite-kit swift
我的 GameScene 中有一个变量,它是分数变量,它与 SKLabelNode 一起显示在屏幕上。
每次发生碰撞时,都会将 1 添加到 score 中,将其作为字符串传输到 SKLabelNode,然后在屏幕上更新。
问题是,当我从我的 GameOverScene(最终得分与“游戏结束”一起显示的场景)调用它时,我得到第一个得分值,即 0。就像 GameOverScene 是读取变量,但不是更新的变量。如何获取更新的变量?任何人都可以帮忙吗?
代码:
class GameScene: SKScene, SKPhysicsContactDelegate {
// S C O R E !
var score = 0
var scoreText: String = ""
var scoreOnScreen = SKLabelNode()
...
override func didMoveToView(view: SKView) {
// S C O R E
scoreOnScreen.position = CGPoint(x: size.width / 2, y: size.height * 0.8)
scoreText = String(score)
scoreOnScreen.text = scoreText
Run Code Online (Sandbox Code Playgroud)
发生碰撞时,得分为+1
func bulletDidCollideWithEnemy(enemy: SKSpriteNode, bullet: SKSpriteNode) {
score++
scoreText = String(score)
scoreOnScreen.text = scoreText
Run Code Online (Sandbox Code Playgroud)
然后,GameOverScene:
import SpriteKit
import UIKit
class GameOverScene: SKScene {
let GameSceneInstance = GameScene()
let bgImage = SKSpriteNode(imageNamed: "background")
let afraidLogo = SKSpriteNode(imageNamed: "gameoverlogo")
var gameOverLabel = SKLabelNode()
override func didMoveToView(view: SKView) {
GameSceneInstance.scoreOnScreen.text = String(GameSceneInstance.score)
bgImage.position = CGPoint(x: size.width / 2, y: size.height / 2)
bgImage.setScale(0.75)
addChild(bgImage)
afraidLogo.position = CGPoint(x: size.width / 2, y: size.height / 2)
afraidLogo.setScale(0.50)
addChild(afraidLogo)
gameOverLabel.fontSize = 40
gameOverLabel.fontColor = SKColor.whiteColor()
gameOverLabel.text = "score: \(GameSceneInstance.scoreOnScreen.text)"
gameOverLabel.position = CGPointMake(self.size.width/2, 2.0 / 3.0 * self.size.height);
addChild(gameOverLabel)
}
Run Code Online (Sandbox Code Playgroud)
我敢打赌,这只是代码的一个简单问题。感谢任何帮助。
我在一个昵称 Jasamer 的 reddit 人的帮助下想通了。盖伊摇滚。
这是我更改的内容:
当场景改变时
let scene = GameOverScene(size: skView.bounds.size)
Run Code Online (Sandbox Code Playgroud)
我补充说:
scene.gameScene = self
scene.score = score
Run Code Online (Sandbox Code Playgroud)
然后,GameOverScene:
class GameOverScene: SKScene {
var gameScene = GameScene()
override func didMoveToView(view: SKView) {
gameOverLabel.text = "score: \(gameScene.score)"
Run Code Online (Sandbox Code Playgroud)
它有效。
我认为的主要问题不是设置scene.GameScene = self.
我希望有一天这对某人有所帮助。
| 归档时间: |
|
| 查看次数: |
1989 次 |
| 最近记录: |