2

私は現在、グリッド ベースのゲーム マップのプロトタイプに取り組んでいます。各「タイル」は 24px x 24px で、スクリプトは 31 個の x ベースのタイルと 21 個の y ベースのタイルを描画し、合計 651 個のタイルを画面に表示します。

私が抱えている問題は、スクリプトの実行方法が、ページが更新されるたびに描画されるすべてのタイルに対してデータベース呼び出しを行っていることです。つまり、タイルとタイルの座標を確認するために 651 回のデータベース呼び出しを行っています。 . 私には、これはひどく非効率に思えます。

x 座標と y 座標は、セッション変数に格納されます。ユーザーが地図の下にある方向ボタンの 1 つをクリックすると、それに応じて適切な座標がオフセットされ、地図が再描画されます。

私が使用しているロジックに基づいてゲームを作成し、数字ゲームをプレイする場合、一度に 100 人のプレイヤーがゲームをプレイしていて、全員がマップをブラウジングしていると仮定します。同時に 65,100 のデータベース呼び出し。これは、システム リソースにとって良いことではありません。

PHP/MySQL プログラミングに関しては初心者ではありません。いくつかの異なるブラウザー ベースのゲームを作成して起動したことがありますが、これは、マップを生成してその周りを移動する最初の冒険です。

タイル マップは次の場所で表示できます。

http://fordserver.com/gamemap/

このための実際のコードは次の場所にあります。

http://fordserver.com/gamemap/index.txt

これをよりスムーズに実行するための良い方法を誰かが推奨できますか? 方向ボタンの 1 つを使用すると、ゲームが実際のマップを生成するのにかなりの時間がかかることに気付くでしょう。特に初めてアクセスした場合はそうです。

配列やその他すべてを使用するさまざまな方法を考えてみましたが、実際には、特定のユーザーが現在どこにいるか、または建物がどこにあるかを示す機能を組み込む予定であるため、ゲームは個々のタイルごとにデータベースをチェックする必要がありますなど

これで得られる助けに感謝します。

リッキー

4

1 に答える 1

2

私はかつて、デカルト座標系も使用し、データベース内に各ポイントのデータの行を持つ単純なゲームを実装しました。これらの行に沿って単一の呼び出しを配置するだけで、それを回避できました。

$xCord=34;
$xCord=16;
// Example data


select
    ID,
    tileImage,
    xcord,
    ycord,
    otherStuff
from
    mainLocationTable
where
    abs(xCord-$xCord)<15
    and abs(yCord-$yCord)<15

これにより、プレイヤーの場所自体の両側に 15 タイルが得られます。もちろん、これをニーズに合わせてカスタマイズできますが、原則は同じです。X、Y デカルト座標をデータベースに格納すると、必要なすべてのデータを 1 回のクエリで簡単に取り出してそこから移動できます。

プレーヤーの位置のデータもセッションに保存するため、プレーヤーがいるタイルに関しては、コード自体に詳細をチェックさせるか、2 番目の呼び出しを使用してより詳細な情報を取得することができます。単一の場所。

于 2013-10-10T02:36:19.320 に答える