2009-04-14 1 views
0

グリッドシステムを使用してJava Bombermanクローンで作業していますが、今は動きに本当に満足していません。プレイヤーが移動キーを押すと、キャラクターは動き始めます(0.25スピード)。プレイヤーはコントロールを失い、キャラクターは完全なタイルを動かすまで動き続けます。キャラクターが次のタイルの中央に来ると、プレイヤーはコントロールを取り戻すだけです。スムースグリッド移動

これはあまりにも「遅い」です。 の方向をに変更したい場合、私はできません。

たぶん私は、私はそれが有効な動きだったかどうかをチェックするために前方にコーナーのチェックしなければならないという意味、スプライトのサイズよりも小さい文字のベースを作ることができます。何かご意見は?

ありがとうございます!

+0

これは、私が今までプレイしたすべてのタイルベースのゲームがどのように機能したかを示しています。 「中間」のタイルを移動することはできませんので、移動する前に次のタイルに達するまで待たなければなりません。おそらく、あなたは本当に、オブジェクトと爆弾のためのプレイヤーとグリッド/タイルベースの動きのピクセルベースの動きが欲しいのですか? –

答えて

0

あなたは現在のスプライトを取り除くと、あなたがそれを必要とする正確にいつ新しいものをロード得ることができる必要があります - 文字は次のタイルに半分の方法を移動し、プレイヤーが戻るにはキーを押すとスプライトと負荷をキャンセルし、すなわち新しいものは0.5から始まります。

0

私はそれがあなたが振る舞いたいと思う方法によると思います。

は、あなたが上に移動していると言う、あなたは右クリック..あなたはそれが上に移動を停止し、右に行きたいですか? 移動を行うと、以前のグリッド位置が保存されます。そのようにして他の場所に移動すると、後方に移動して移動方向を変えることができます。

移動してクリックすると、移動速度がその逆になるように設定できます...

あなたが欲しいものが何であるかを知っていると答えにくいです。

1

私はちょうど前にBombermanをプレイしました:) あなたはかなり滑らかに動くことができ、グリッド計算はありません。 私はそれほどJavaを使用していません。私はフラッシュをたくさん使います。衝突をチェックするグリッドはありますか? 正確には何ですか?

が、それは(私はそれをスケッチしようとするでしょう)のようなもの持って理にかなって:私はあなたがボンバーマンのクローンを作成したいどのくらいか分からないので、私は少しオフになる場合もあり

float vx,vy = 0;//velocity on x and y 
Character bomberman 

void keyDownHandler(KeyboardEventSomething event){ 
if(key is Left && ! Right) vx -= .5; 
else if(key is Right && !Left) vx += .5; 
//idem for Y axis 
} 

void keyUpHandler(KeyboardEventSomething event){ 
vx = vy = 0; 
} 

void updateLoop(){ 
    bomberman.x += vx; 
    bomberman.y += vy; 
} 

をかない。あなたはグリッドの動きを記述しているのは、ユーザーの入力を無効にしないでくださいhopmon

1

に近いようです。これまでそれについて絶えず世論調査する。

は、次の処理を行いティック()またはOnFrameEnter()関数を持っている:

投票キーボード/ジョイスティック/何でも、およびユーザーが入力した最後の方向をキャッシュします。

文字の位置を確認してください。

文字はグリッドの正方形の中心にアイドル状態である場合、それは適切な方向にVelocityの設定及び壁/衝突体が邪魔にありますがない限り、動き一歩upate。最後のキーを押して無効な値にします。文字が既に動いている場合はそうで

は、方向転換ノード(交差点)の壁、または近接との衝突をチェックし、キャラクタの位置を更新します。壁に衝突した場合は、キャラクターを止めてください。方向変更ノードに近く、キャッシュされた方向に移動できる場合は、方向を変更してキャッシュされた方向をクリアします。そうでなければ、入力方向が現在の方向と反対である(それは廊下にあり、プレイヤーは逆にしたい)場合は、方向を逆にして、キーを押してください。このすべては、キャラクターが壁に当たって止まるまで、常に移動し続けなければならないことを前提としています。キャラクタをどこにでも停止させたい場合は、逆方向キーを押して停止させるだけです。

キーを押すと、キャラクターが交差点に近づくと、プレイヤーは方向を先制的に変更できます。この方法では、キャラクターは移動する前に停止するのを待つ必要はなく、プレイヤーはゲームが反応していないと感じません。ポーリングは常にプレーヤーにいつでも方向を逆にさせ、交差点での方向変更をより速く見せます。

0

プレイヤーの位置(アニメーションの開始位置)を更新するように見えますが、その中に含まれているグリッドセルを変更してください。

目的の効果を得るには、スプライトのレンダリング位置が、そのスプライトによって表されるエンティティがグリッド上にある場所とは独立している必要があります。セルを変更することなく、セルの中心の範囲内でグリッド内を移動することができます。この範囲が正しく選択されていない場合は、「この(視覚的に)セルにはdoh!imですが、将来のセルではim」と表示されるか、「自分のアバターが壁に重なっています」と表示されます。

プレーヤーセルが、範囲内に入るまで(スプライトの境界球の1/3と言います)、彼が入っているセルの境界/境界線から変更しないでください。また、中断されるようにアニメーションプロセスを変更する必要があります。

これは、あなたがプレーヤーを与える自由度の独立して(のような、それだけ上に移動でき、下、左、右、および対角線360 VS度)

あなたがあるために気をつけなければならないもう一つは、スプライトがセルサイズより大きい場合例えば、脂肪族モンスター、またはXセルにまたがっているが必ずしも長方形ではないスネークのボス。