5

在 MMO 游戏客户端中,我需要创建一个循环,该循环将在 30 秒内循环 30 次(每秒 1 次)。令我最失望的是,我发现我不能time.sleep()在循环内使用,因为这会导致游戏在循环期间冻结。

循环本身非常简单,唯一的困难是如何延迟它。

limit = 31
while limit > 0 :
  print "%s seconds remaining" % (limit)
  limit = limit -1

python 库作为 .pyc 文件存在于客户端中,位于单独的文件夹中,我希望我可以避免弄乱它们。你认为有什么办法可以解决这个延迟还是死路一条?

4

2 回答 2

5

你的游戏有一个主循环。(是的,它确实。)

每次通过循环检查状态、移动玩家、重绘屏幕等时,都会检查计时器上的剩余时间。如果至少 1 秒过去了,你打印出你的“剩余秒数”俏皮话。如果至少 30 秒过去了,无论你的动作是什么,你都会触发。

于 2012-05-31T20:01:51.703 回答
2

除非您愿意失去精度,否则您无法在没有阻塞或线程的情况下做到这一点......

我建议有时像这样,但线程是正确的方法......

import time

counter = 31
start = time.time()
while True:
    ### Do other stuff, it won't be blocked
    time.sleep(0.1)
    print "looping..."

    ### When 1 sec or more has elapsed...
    if time.time() - start > 1:
        start = time.time()
        counter = counter - 1

        ### This will be updated once per second
        print "%s seconds remaining" % counter

        ### Countdown finished, ending loop
        if counter <= 0:
            break

甚至...

import time

max = 31
start = time.time()
while True:
    ### Do other stuff, it won't be blocked
    time.sleep(0.1)
    print "looping..."

    ### This will be updated every loop
    remaining = max + start - time.time()
    print "%s seconds remaining" % int(remaining)

    ### Countdown finished, ending loop
    if remaining <= 0:
        break
于 2012-06-01T11:59:24.907 回答