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 に答える