1

私はsmalltalkで、使用タイマーを使って小さなゲームを作っています。オブジェクトが毎秒表示され、ゲームは10回続きます。whileループを10秒間実行すると、コントローラーからの入力をキャプチャしたり、ビューに表示したりできなくなります。そのため、新しいプロセスを作成しましたが、そのままフォークすると、runメソッドの優先度が高すぎて、他のメソッドを実行する機会がありません。これを行うためのより良い方法はありますか?

編集:

49でrunメソッドをフォークしましたが、コントローラーとビューは機能しますが、ビュー上にあるときにマウスを動かした場合に限ります。

4

2 に答える 2

1

プロセスをフォークすることはできますが、通常のウィンドウイベントキューを介して処理する必要があります。次のようなものを試してください。

tick
   self doStuff.
   self gameFinished ifFalse: [
      [(Delay forSeconds: 1) wait.
         [self tick] uiEventFor: self builder window] fork]
于 2012-11-21T03:26:20.510 に答える
0

私見、プロセスをフォークすることは、この問題を解決するための良い設計上の決定ではありません。アクションを実行する必要があるときにタイムスタンプ付きのアクションを配置するアクションキューを作成したいと思います。次に、ゲームのメインループの各サイクルで、期限のあるすべてのアクションを削除し、それらを処理します。

たとえば、オブジェクトが1秒ごとにスポーンする場合、将来1秒間アクションを追加し、そのアクションを処理するときに、将来1秒間同じアクションを追加します。

これにより、並行プロセスでゲームを実行しようとしている場合よりも、ゲームの予測可能性とデバッグ可能性が大幅に向上します。

于 2012-11-19T14:32:05.553 に答える