当玩家点击屏幕开始游戏时如何开始基于时间的得分
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 >= 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
【讨论】:
以上是关于当玩家点击屏幕开始游戏时如何开始基于时间的得分的主要内容,如果未能解决你的问题,请参考以下文章