2017-05-11 21 views
5

多くの言語では、次のような何かを行うことができます。SqueakのSmalltalkの:ゲームループ

どのようにSqueak Smalltalkでこれを行いますか?

wiki.squeak.orgに記載されているように、キーボード入力を読み込んで反応することができます。私は

1 to: 10 do: [ :i | game updateAndDraw ] 

のようなものを実行しようとした場合でも、すべてのイベントは今までのループが実行された後を扱っています。

+0

Morphicで実装されているゲームの例を確認できます。確かにそれらのいくつかを見つけることができます。私は普通の単純な方法は、ゲームのための単一のMorphを持ち、キーボードイベントを処理する(モデルを変更する)ことであると思います。#updateAndDrawは、モデルの現在の状態に応じてサブモフを再描画します俳優、国家の可視表示など) –

+0

入力をしなくてもゲームを更新し続ける必要があります。あなたのアプローチではどうしますか? – Higemaru

答えて

5

Morphicはすでにメインループを提供しています。

uiProcess := [ 
    [ world doOneCycle. Processor yield ] repeat. 
] newProcess ... 

そして、あなたはdoOneCycleに掘る場合は、(オプション)画面のためのチェックが

  • プロセスイベント
  • を遅延( interCyclePause:
  • サイズを変更しないこと

    • あります:それはMorphicProject class>>spawnNewProcessにあります
    • プロセスstepメソッド
    • re-displa ys the world

    マウス/キーボードイベントハンドラを追加し、アニメーションのステップメソッドを追加し、再表示するためのメソッドを描画することによって、これらのフェーズにコードをフックする必要があります。これらはすべてあなた自身のゲームモーフのメソッドでなければなりません。システム全体で例を見つけることができます。

  • +0

    有望そうですね、ありがとう! – Higemaru

    +0

    1つの例を教えてください。どこに行くのか、どのクラスをサブクラス化するのかは私には分かりません。 – Higemaru

    0

    行動に一定の回数実行するには:

    10 timesRepeat: [game updateAndDraw] 
    

    whileセマンティクスを使用するには:しばらくセマンティクスを使用して永久ループを作成するには

    i := 5 
    [i > 0] whileTrue: [ 
        i printNl. 
        i := i - 1. 
    ] 
    

    を、

    [true] whileTrue: [something do] 
    
    +0

    これは私の質問にまったく対応していますか? – Higemaru

    +0

    私の謝罪、おそらく私はあなたの問題を正確に理解していない。 –

    0

    あなたをを使用してMorphicイベントループを利用できるはずです。