2015-03-31 97 views
0

我有另一個視圖來處理上一屆會議以及排行榜的分數。我如何從GameOver類的GameScene類訪問我的分數int?從另一個類訪問整數

隨着出去找多,我試圖這樣做是爲了找到路自己:

class GameOver: SKScene { 

let score = GameScene().score 

init(size: CGSize, won:Bool) { 

    super.init(size: size) 

    backgroundColor = SKColor.whiteColor() 

    var message = "\(score)" 

    println(score) 

    let label = SKLabelNode(fontNamed: "AvenirNextCondensed-Heavy") 
    label.text = message 
    label.fontSize = 40 
    label.fontColor = SKColor.blackColor() 
    label.position = CGPoint(x: size.width/2, y: size.height/2) 
    addChild(label) 
} 

我想,如果我創建了一個變量我的成績在GameScene它會工作,但它確實它使用得分變量等於0.那麼,我將如何將球員死亡時的得分轉移到上面的場景?

class GameScene: SKScene, SKPhysicsContactDelegate { 

struct PhysicsCategory { 
    static let None: UInt32 = 0 
    static let All: UInt32 = UInt32.max 
    static let Enemy: UInt32 = 0b1 
    static let Player: UInt32 = 0b10 
} 

let player = SKSpriteNode(imageNamed: "Player") 
var playerAlive: Bool = true 

var touched:Bool = false 
var location = CGPointMake(0, 0) 

var difficulty = 1.0 

var timer: NSTimer! 
var scoreTimer: NSTimer! 
var lastAddedTime : CFTimeInterval = 0 

var score: Int = 0 
var scoreLabel: SKLabelNode! 


override func didMoveToView(view: SKView) { 
    backgroundColor = SKColor.whiteColor() 

    player.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25) 
    player.physicsBody = SKPhysicsBody(circleOfRadius: player.size.width/2) 
    player.physicsBody?.dynamic = true 
    player.physicsBody?.categoryBitMask = PhysicsCategory.Player 
    player.physicsBody?.contactTestBitMask = PhysicsCategory.Enemy 
    player.physicsBody?.collisionBitMask = PhysicsCategory.None 
    player.physicsBody?.usesPreciseCollisionDetection = true 
    addChild(player) 

    physicsWorld.gravity = CGVectorMake(0, 0) 
    physicsWorld.contactDelegate = self 

    var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "increaseDifficulty", userInfo: nil, repeats: true) 

    var scoreTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "addScore", userInfo: nil, repeats: true) 

    scoreLabel = SKLabelNode(fontNamed: "AvenirNextCondensed-Heavy") 
    scoreLabel.text = "\(score)" 
    scoreLabel.fontColor = SKColor.blackColor() 
    scoreLabel.fontSize = 40 
    scoreLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) + self.frame.size.height * 0.4) 
    addChild(scoreLabel) 

} 

func addScore() { 
    score += 1 
    println(score) 
} 

回答

0

我認爲你需要聲明的分數變量作爲一流水平的變量,但它不是直接在斯威夫特支撐包裹score VAR在結構是這樣的:

private struct ScoreStruct { 
    static var score: Int = 0 
} 

class var staticScore: Int { 
    get { return ScoreStruct.score } 
    set { ScoreStruct.score = newValue } 
} 

而且你可以用它喜歡: GameScene.staticScore

+0

只是一個簡短的問題。這會在我的GameScene或GameOver中需要嗎? @aks – swift 2015-03-31 06:05:32

+0

如果您在GameScene中修改score var,然後在GameScene中聲明此結構,您可以像GameScene類中的'staticScore ++'一樣直接更改其值。在GameOver類中使用'GameScene.staticScore' – Aks 2015-03-31 06:08:41

0

GameScene是一個類。它在哪裏實例化? 搜索項目的術語「presentScene:」應該有像

let myGameScene = GameScene() 
skView.presentScene(myGameScene) 

有些語言還必須有項目的地方包含類似下面的代碼。添加該行評論

let myGameOver = GameOverScene() 
if(conditionIsMet) 
{ 
    myGameOver.passScore(myGameScene.score) //add this line 
    skView.presentScene(myGameOver) 
}