問題の衝突検出部分については、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を含むいくつかのオープンソースプロジェクトが既にあります。学習曲線が高くなり、コーディングがより難しくなりますが、最終的にはあなたにとって恩恵を受ける可能性があります。ヘック、それはあなたが熱心ならば、それを一から書いた経験そのものです!
ありがとうございました!私はあなたが言及したピクセル検出ライブラリに実際に切り替えました。 私がやったことは、境界を作って、私の地面を2つの異なるオブジェクトにすることです。だから私の選手が国境に当たっていると重力が止まるのをやめようとしているのですが、もし私の選手が「塗りつぶし」(国境を過ぎている)なら、彼はそれを上回るまで3ピクセル上げ続けます。国境が考える限り、それは驚くほどうまく機能します。上のピクセルの数が少ないほど、よりスムーズになりますが、境界よりも上に押すほど時間がかかります。 –