首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从另一个类访问int

从另一个类访问int
EN

Stack Overflow用户
提问于 2015-03-31 13:40:58
回答 2查看 43关注 0票数 0

我有另一个视图,处理从最后的会议以及排行榜的分数。如何从我的GameOver类中的GameScene类访问我的得分int?

没有太多的寻找,我试着通过这样做来找到自己的路:

代码语言:javascript
运行
复制
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的分数变量。那么,当玩家死亡时,我如何将比分转移到上面的场景?

代码语言:javascript
运行
复制
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)
}
EN

回答 2

Stack Overflow用户

发布于 2015-03-31 14:01:28

我认为您需要将score变量声明为类级别变量,但在Swift中不直接支持,因此将score变量包装在结构中,如下所示:

代码语言:javascript
运行
复制
private struct ScoreStruct { 
  static var score: Int = 0 
}

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

你可以像这样使用它:GameScene.staticScore

票数 0
EN

Stack Overflow用户

发布于 2015-03-31 14:11:59

GameScene是一个类。它在哪里实例化?在您的项目中搜索术语"presentScene:“,应该有一些类似这样的语言

代码语言:javascript
运行
复制
let myGameScene = GameScene()
skView.presentScene(myGameScene)

此外,在您的项目中必须有一个地方包含如下代码。添加带有注释的行

代码语言:javascript
运行
复制
let myGameOver = GameOverScene()
if(conditionIsMet)
{
    myGameOver.passScore(myGameScene.score) //add this line
    skView.presentScene(myGameOver)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29361342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档