当玩家点击屏幕开始游戏时如何开始基于时间的得分

Posted

技术标签:

【中文标题】当玩家点击屏幕开始游戏时如何开始基于时间的得分【英文标题】:How to start time-based score when player taps on the screen to begin the game 【发布时间】:2019-05-17 20:52:32 【问题描述】:

我一直在关注这个解决方案 (How can I increase and display the score every second?),根据经过的时间为我的游戏添加得分。我让它完美地工作;当玩家输掉时,分数停止,当玩家重新开始游戏时,分数重新回到 0。

但是,“计时器”在用户点击开始之前自动开始,我试图让“计时器”在玩家点击游戏开始播放时启动(用户首先必须点击屏幕开始跑步,开始游戏)。

在我的 didMove 方法中,我有

scoreLabel = SKLabelNode(fontNamed: "Press Start K")
scoreLabel.text = "Score: 0"
scoreLabel.position = CGPoint(x: 150.0, y: 620.0)
scoreLabel.zPosition = GameConstants.ZPositions.hudZ

addChild(scoreLabel)

在我的覆盖函数更新方法中,我有

if gameStateIsInGame 
    if counter >= 10 
        score += 1
        counter = 0
     else 
        counter += 1
     

我认为通过将if gameStateIsInGame 添加到 touchesBegan 方法,它会在用户点击屏幕时启动,但这不起作用。我尝试在case.ready:case.ongoing: 下添加它,但都没有成功。

这是我在 touchesBegan 方法顶部的内容。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    switch gameState 
    case .ready:
        gameState = .ongoing
        spawnObstacles()

    case .ongoing:
        touch = true
        if !player.airborne 
            jump()
            startTimers()
        
    

关于如何解决这个小问题的任何想法?我好像搞不懂。

****编辑****

这里是更新的覆盖函数更新方法。我摆脱了if gameStateIsInGame 并在if gameState 下添加了if counter &gt;= 10 语句。

    override func update(_ currentTime: TimeInterval) 
    if lastTime > 0 
        dt = currentTime - lastTime
     else 
        dt = 0
    
    lastTime = currentTime

    if gameState == .ongoing 
        worldLayer.update(dt)
        backgroundLayer.update(dt)
        backgroundGround.update(dt)
        backgroundSunset.update(dt)
        if counter >= 10 
            score += 1
            counter = 0
         else 
            counter += 1
        
    

【问题讨论】:

你能显示你定义gameState的代码吗? @Gismay 所以,你问我在哪里定义 gameState 帮助我弄清楚了!我想我只是将自己与 gameStateIsInGame (来自我所遵循的解决方案)和我的 gameState 混淆了。谢谢你。我使用现在有效的更新方法编辑了我的帖子。 尝试在解决方案中添加答案并将其标记为已接受。 @Huntress 很高兴我能帮上忙! 【参考方案1】:

简化解决方案

在覆盖函数更新下添加了分数计数器。

  override func update(_ currentTime: TimeInterval) 

        if gameState == .ongoing 
            if counter >= 10 
                score += 1
                counter = 0
             else 
                counter += 1
            
        

【讨论】:

以上是关于当玩家点击屏幕开始游戏时如何开始基于时间的得分的主要内容,如果未能解决你的问题,请参考以下文章

WBS需求分析

如何在中间重新开始循环[开始重复]

我的播放器的状态如何不会在每次屏幕加载时重置?

python及pygame雷霆战机游戏项目实战14 游戏开始结束界面

飞翔的小鸟

基于Java的飞机大战游戏的设计与实现