0

最近、ずっとやりたかったことをやりたいと思っていましたが、そのスキルも時間もありませんでした。コンピューター ゲームです。より正確に言えば、私のお気に入りのゲームの 1 つのオマージュ/クローンです。簡単なことから始めるために、Castlevania シリーズに基づいた古典的な 2D プラットフォームを作成することにしました。

Ruby プログラマーとして、Gosuを使用することにしました。次に、車輪を再発明したくないので、Chipmunkを使用することにしました。

数日後、不可解な衝突検出の問題が発生しました。一体何が起こっているのかを確認するためだけに、境界ボックス描画機能を追加しました。

ここに画像の説明を入力

ご覧のとおり、Belmont は遠く離れていない壁のブロックに衝突しています。gosu gem に含まれているデモ ゲームは正常に動作するので、何か問題があるに違いありません。おそらく、ポリゴンShapeがどのように定義され、スペースに追加されるかについて、あまり理解していません。私が描く場所ではないことは確かです。

Brush < Entityゲームの公開レポがあるので、壁 ( ) とプレイヤー ( ) がどのようPlayer < Entityに定義されているか、そしてそれらが実際に単純な長方形のポリゴン形状を持っていることを確認できます。壁はスペースに追加されず (それらはローグです)、プレイヤーだけが追加されます。bodyゲームのデバッグを試みて、位置がどこにあるかを確認しましたが、すべて問題ないように見えました。

https://github.com/ellmo/castellvania

プレイヤーはゆっくりと倒れますが、上/左/右の矢印でコントロールできます。チルダ ボタン ( ~) は境界ボックスを示し、衝突ボックスは常に表示されるはずです。

何が間違っているのかを理解しようとする助けが必要です。

4

1 に答える 1

0

おそらく、多角形の形状がどのように定義され、空間に追加されるかについては、あまり理解していません。私が描く場所ではないことは確かです。

それでおしまい。シェイプの座標はボディの位置に加算されますが、減算されることはありません。あなたEntity.boundariesの行を置き換えます

verts << CP::Vec2.new(@shape.body.p.x - @shape[vert].x, @shape.body.p.y - @shape[vert].y)

verts << CP::Vec2.new(@shape.body.p.x + @shape[vert].x, @shape.body.p.y + @shape[vert].y)

正しい画像が得られます。(描画はまだ壊れていますが、バウンディング ボックスは正しくなります。

于 2013-05-16T19:43:51.353 に答える