0

私は、Corona SDKで作成されたゲームで、次のタスクを処理するための最良の方法と最も効率的な方法を決定しようとしています。いろいろなやり方があり、かなり混乱するようですので、ここの誰かが助けてくれることを願っています!

インベントリシステム/パズルなどを備えたアドベンチャータイプのゲームを作成しています。これまでに開発した思考プロセスでは、ゲームの特定の側面を処理するために個別の「クラス」を使用します。InventoryManagement.lua、ObjectManagement.lua、PuzzleManagement.luaなど。

ちなみに、このゲームには実際には物理学は含まれていませんが、アニメーションが発生する静止画像が必要です(ドアを開けたり、オブジェクトを拾ったりすることを考えてください)。

これが私が達成しようとしていることの例です:

  • 新しいゲームを開始すると、最初のシーンが読み込まれます。プレイヤーのインベントリ、部屋のオブジェクト、それらの状態、これらのものの画像などを設定する必要があります。これは、最初のゲームのロード時にデフォルトになり、その後にロードされる可能性があると思います...
  • 次に、プレーヤーはキーをクリックしてそれを取得します。この時点で、キーはインベントリに表示される必要があるため、シーンから削除され、インベントリに追加され(InventoryManagement経由?)、シーンが更新されます(Via InventoryManagement?)。 SceneManagement経由?)..。
  • これ以降、キーはシーンに表示されなくなります。
  • ここで、キーをクリックしてドアで使用するとします。ドアはアニメーションで開いたままになり、これからも開いたままになります。
  • プレーヤーが部屋を出て戻ってきた場合、キーは表示されません。

今では、シーンに出入りするたびにシーンをロード/アンロードするのは理にかなっていますが、このようにすると、メモリを大量に消費するなどになりませんか?...画面に30個のオブジェクトがある場合、シーンを処理するためのより良い方法はありますか?

うまくいけば、それは明らかです-これらの要素のそれぞれに関連する特定の情報を見つけるのは難しいです。すべてが物理ゲームに関連しているようで、「シーンにキーを追加する方法について何かを見つけることができないようですが、そうでない場合は、それが使用されている場合は、そのドアをアニメートします」:(

ありがとう!

4

2 に答える 2

2

ストーリーボード間をジャンプするときに、予期しない結果になるという同じ問題がありました。ひとつわかったことは、

  1. 使用するタイマーは必ずRuntime:remove停止してください。すべてをリセットしたい場合の 1 つの代替方法は、reset.luaファイルを作成し、その上でまたはeenterSceneを使用することです (単に でメモリ内に装備したすべての表示オブジェクトを取り除きたい場合)。storyboard.removeScenestoryboard.purgeScenscene:createScene

また、チェックアウトするstoryboard.RemoveAll()か、purgeAll()

于 2013-03-20T20:51:45.200 に答える
1

シーン間でそれらを使用するには、グローバル空間で (_G を使用して) いくつかのものを作成する必要があります。

シーンを切り替えるには、「ストーリーボード」がとてもいいです。

ただし、メモリを大量に消費する場合は、手動のメモリ ハッキングを使用する必要があります。主に、シーンをロードする前に、最後のシーンをクリーンアップした後に「collectgarbage」を数回呼び出す必要があります。興味深い問題:

シーン「A」をロードしました。

シーン「B」に切り替えます。

ゲームは「A」を「アンロード」しますが、ガベージ コレクターは「B」をロードしません。最終的には「A」+「B」のメモリ使用量になります。

私がコロナで作っていたこのアドベンチャーゲームでは、「ゴミを集める」トリックを理解するまで、いくつかのクレイジーなクラッシュが発生しました。

于 2013-02-01T13:25:49.743 に答える