タイルベースのアイソメトリックゲームでの自由な動き


9

タイルベースのアイソメトリックゲームで自由な動きを実装する合理的な簡単な方法はありますか?つまり、プレーヤーがタイルからタイルに瞬時にジャンプしたり、グリッドに「スナップ」されないだけではありません(たとえば、タイル間の動きがアニメーション化されているが、アニメーションが完了する前に何もしないようにロックされている場合)。私はゲームプログラミングに関わることは本当に初心者ですが、このサイトや他のリソースの助けを借りて、基本的なことを行うのは非常に簡単でしたが、この特定の問題に役立つリソースを見つけることができませんでした。

現在、私はこれに近いものを即興で作成しています:http : //jsfiddle.net/KwW5b/4/(WASDの動き)。移動のアイデアは、マウスマップを使用してプレーヤーが別のタイルに移動したことを検出し、オフセットを反転することでした。ほとんどの場合、正しく機能します(各コーナーでプレーヤーが間違った場所に移動します。http:を参照してください)。 //www.youtube.com/watch?v=0xr15IaOhrI、これはおそらく、フルマウスマップを適切に機能させることができなかったためと思われます)が、それが良い/正常なソリューションに近いという幻想はありません。とにかく、それはほとんどの場合、私が実装したいものの種類を示すためだけです。


そのコードは見栄えがよく、問題は正確に何ですか?あなたはかなり良い(良い意味で)あなたのコードはかなり良いようですが、デモにはどの機能が欠けていますか?
AturSams 2012

コーナーの問題で私が意味したのは、youtube.com / watch?v = 0xr15IaOhrIのような動作でした。問題のあるオフセットについて多くのifチェックを行う以外に、他の解決策を思い付くことができませんでした。それでも、プレーヤーが間違った場所にワープする特別な場合があります。しかし、私が言ったように、私が思いついた方法が他のどこで使用されるのか見たことがないので、私はこの種の動きが通常どのように実装されるのか疑問に思っていました。
xtr486 2012

回答:


10

まず、方向を次のように変更することをお勧めします:W-左上S-右下A-左下D-右上

より直感的に:W-上S-下A-左D-右

あなたの懸念については、2つの関数を作成することをお勧めします。1つはアイソメトリックタイル座標をグリッド座標に変換し、もう1つはその逆です。そうすれば、MVCを分離するだけで、アクティブタイルを計算するときに作業が楽になります。 ここに画像の説明を入力してください


1
あなたの答えは本当に有望に見えますが、私はそれのほとんどが私の頭を超えていることを認めます。ただし、今後数日間は、ソリューションの消化を続けます。これはあなたが求めていたものに近いところですか?jsfiddle.net/Sd4ZP/18いくつかの論理エラー(1つずれているなど)はありますが、私が知る限り、トップダウンマップとアイソメトリックマップは同じ動きをします。私も周りにもらっていないこと等尺にトップダウンからのオフセットタイルを変換する方法..です
xtr486

今のところこれで問題ありません。夕方に調べます。アイソメトリックタイル描画メソッドの変換をpositionToUser()変換関数に適用し、positionFromUser()メソッドでそれを逆にします。
Markus von Broady、2012年

問題が表示されます。キャンバス描画APIを使用する代わりに画像を配置することで、アイソメトリックビューを描画しています。結局のところ、あなたのizoタイルは無地よりはるかに多くなるので、それはかなり論理的です。ただし、デバッグを行うには、タイルの間に線を引く必要があります。これにより、作業が非常に簡単になります。とにかく、私はあなたのコードをフォークして、positionToUser(x、y)変換関数を作成しました。黒い正方形をタイルの中央に配置し(isoビューでは常に中央に配置されるため)、マウスを下のキャンバス上に移動してテストします-変換されたドットがizoキャンバスに表示されます:jsfiddle.net/tZTXS/1
Markus von Broady

ありがとう!私は実際になんとか自分自身(つまり、一種)を推定できました。つまり、drawIsometric関数のアイソメトリックオフセットです。これで、次のようになります。jsfiddle.net / P2eKF / 4は、元の質問で私が尋ねたとおりの動作をするようですので、答えをマークします。:)
xtr486

よかったです!WA、WD、AS、SDキーの組み合わせが45度ではなく等角軸に動きを合わせる方法が好きです。よくできました。
Markus von Broady、2012年

0

私が理解しているのであれば、プレイヤーはジャンプせずにタイルをタイルに移動してほしい。あなたはできる:

1-タイルt0とオフセット0から開始

2-プレーヤーがタイルt1に移動したときにオフセットを設定=-(t1-t0)

3-プレーヤーの更新で、オフセットが0でない場合、更新時間とプレーヤーの速度を使用してデクリメントします。

amount = deltatime * playerSpeed
deltaoff = sqrt(offsetX*offsetX + offsetY*offsetY)
total = min( amount, deltaoff )
offsetX = offsetX - (total * offsetX / deltaoff)
offsetY = offsetY - (total * offsetY / deltaoff)

4- Yoは、offer == 0チェックを使用して、プレーヤーがタイル上にあることを確認できます。

これにより、マップ内を自由に移動するが、タイルに固執するプレーヤーが得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.