2009-08-08 7 views
3

まず最初に、私はactionscript 3.0にピクセルベースの衝突検出がないことに驚いています。Actionscript 3.0で衝突検知を「バウンス」するにはどうすればよいですか? (ビデオあり)

とにかく、私は私が短い中で、私が側を作ってるんだ、より良い私がやろうとしているかを示すために(私は必要に応じて別のライブラリを選択するつもりです)

を衝突ライブラリfound hererecorded a video使用しています(マリオのような)スクロールゲームと私は地面のように行動する私の地面(フロア)をしたい...ユーザーが歩くとき、それは地面の上を歩く笑

私は "バウンス「地面の下のX量であれば彼を押し上げる」のような効果が得られます。それはうまく見えますが、私がそれをやり遂げることができるとわかった唯一の方法は、私のユーザーが地面に触れると飛び続けることです(ビデオではありません)。

だから私のユーザーが歩いているときに彼は地面の上の丘に行くと、それはまた、ユーザーのチャーも上がるようになる方法を知っている?

答えて

4

問題の衝突検出部分については、pixel perfect collision detection in ActionScript 3に関するreddit.comの記事が今日投稿されました。

実際のロジックは、あなたが衝突を検出したときに何をすべきかです。しかし、ほとんどのサイドスクロールゲームが平らなウォーキングサーフェイスをどのように使用しているか気付いたことがありますか?

アイデアのような高さマップを使用することが、衝突検出を必要としないアイデアです。配列(またはテクスチャのピクセル)を使用して、サーフェスに沿った地面の各セクションの高さを決定することができます。あなたのキャラクターがシーンを移動するときに、キャラクターの位置を高さマップにインデックスするだけです。

// How many pixels each index of the heightMap contains. 
// You'll probably want to use the same value as the distance 
// your character moves when the move left/right key is pressed. 
const SECTION_SIZE:int = 10; 

// Fill this as a huge array with all the heights and 
// the size of this will be (mapHorizontalLengthInPixels/SECTION_SIZE). 
// Each element will be the distance from the top of the screen to 
// place the character so it looks like it is standing on the ground. 
var heightMap:Array = [ /* ... */ ]; 

// TODO: you might want to Tween to this value so it doesn't look chunky 
character.y = heightMap[character.x/SECTION_SIZE]; 

テクスチャの代わりに、配列を使用するには、あなただけのBitmapDataオブジェクトの1つの画素にheightMap配列に置かれていたであろう、各intを置きます。テクスチャを使用する利点は、小さなBitmapDataオブジェクトに大量の情報を格納し、getPixel32()を使用して読み出すことができることです。マップを一度生成し、保存して(pngのように)SWFに埋め込むことができます。

あなたが夢中になりたい場合は、プラットフォーム、ブリッジ、移動オブジェクトなどが必要な場合はおそらく2d物理エンジンを使用します。 APE,Box2dAS3,Fisix、およびFOAMを含むいくつかのオープンソースプロジェクトが既にあります。学習曲線が高くなり、コーディングがより難しくなりますが、最終的にはあなたにとって恩恵を受ける可能性があります。ヘック、それはあなたが熱心ならば、それを一から書いた経験そのものです!

+1

ありがとうございました!私はあなたが言及したピクセル検出ライブラリに実際に切り替えました。 私がやったことは、境界を作って、私の地面を2つの異なるオブジェクトにすることです。だから私の選手が国境に当たっていると重力が止まるのをやめようとしているのですが、もし私の選手が「塗りつぶし」(国境を過ぎている)なら、彼はそれを上回るまで3ピクセル上げ続けます。国境が考える限り、それは驚くほどうまく機能します。上のピクセルの数が少ないほど、よりスムーズになりますが、境界よりも上に押すほど時間がかかります。 –

2

地面との垂直方向の衝突を検出しているようですが、水平方向の衝突は無視されているようです。しかし、単に水平なオブジェクトに当たったときに停止するのではなく(つまり、床の1ピクセルの変化は壁と同じように扱われます)、プレーヤーを上に移動する必要がありますオブジェクトのここでもカットオフが必要なので、プレイヤーはヒットしたときに壁の上に押し込まれません。したがって、水平方向の衝突が検出された場合、オブジェクトの上部が現在の位置から10ピクセル以上離れていない限り、プレーヤーをオブジェクトの上部に移動するようなものです。

関連する問題