2011-07-01 8 views
2

シンプルなフラッシュゲームを作っていますし、与えられたレベルで壁を打つからアバターを維持しようとしています、ここで私が書いたコードがあり、そのActionScript 3の壁ヒット検出

 var hitWall:Boolean = checkWallHitlvl1(); 



     if (downKeyIsBeingPressed ) 
      { 
       avatar.moveABit(0, 1); 
       if(hitWall) 
       { 
        avatar.moveABit(0, -5); 

       } 

      } 
      else if (upKeyIsBeingPressed ) 
      { 
       avatar.moveABit(0, -1); 
       if(hitWall) 
       { 
        avatar.moveABit(0, 5); 

       } 

      } 
      else if (leftKeyIsBeingPressed ) 
      { 
       avatar.moveABit(-1, 0); 
       if(hitWall) 
       { 

        avatar.moveABit(5, 0); 


       } 

      } 
      else if (rightKeyIsBeingPressed) 
      { 
       avatar.moveABit(1, 0); 
       if(hitWall) 
       { 
        avatar.moveABit(-5, 0); 

       } 

      } 

十分に簡単hitWallかどうかをチェックしアバターがレベルの壁に当たったとき、このコードの問題は、私が右から壁に当って左に動こうとしているにもかかわらず、hitWallが壁が当たった場所からチェックしていないので、実際にどちらの方向からプレイヤーが特定の壁に当たっているのかを実際に把握する必要なく、この作業を行う方法はありますか?私はアバターを右から動かすと自動的に左に動かしましたが、うまく動かなかったそうですね...

お願いします。

ありがとう= D

EDIT1:私はそれが動作するようになりましたが、それは私が後方に5つのピクセルの処理に持っているのでちょっとぎくしゃく見える、私はフラッシュのhitTestObject以来、以来、残念ながら逆方向に1つのピクセルをステップすることはできません、コードを編集しましたまだtrueを返します(checkWallHitLvl1()は基本的にhitTestObjectを使用してプレーヤーが壁に当たったかどうかを確認します)、提案はありますか?

EDIT2:私は、彼らはすべてのパス私は、コードを上に掲示する場合だけで、いくつかのより多くのテストを実行し、それが正常に動作を確認する必要があり、それを修正する方法を発見し、基本的に私はちょうどチェックする4つのブール変数を使用しましたどの方向に壁に当ってそこから行ったのですか?= D

+2

コードに欠陥があります。テストが失敗し、それ以上動かなくなった場合、テストが実行されます。ここでの脆弱性は、テストが起こってアバターがすでに壁に入っているということです。最初に移動し、失敗したらテストを戻す必要があります。 –

+0

私はこれを調べて、それがうまくいくかどうかを確認します。助言= D – r3x

+0

の方がうまくいきましたが、期待通りに滑らかではありません。壁に当たった後にステップを進んでも、actionscrtiptのhitTestObjectは本当に、私はそれが動作するために5つのステップのように後ろに行かなければならなかったし、ちょっとぎこちなくて、そんなに滑らかに見えません...他の提案? アドバイスありがとうございます=) – r3x

答えて

3

私がしていることは、ヒットしなかったときの位置を保持することです。

if (downKeyIsBeingPressed ) 
     { 
      avatar.moveABit(0, 1); 
      if(hitWall) 
      { 
       avatar.moveTo(safeX, safeY); 

      } else { 
       safeX = x; 
       safeY = y; 
     } 
+0

実際にはかなり良いですが、私の修正でそれに似たようなことをしましたが、これは簡単です...うまくいくはずです、thanx m8 =) – r3x

0

壁のステージ座標はlocalToGlobal(たとえば中心点を取る)で取得し、テスト前にアバターの中心からこの点までの方向を比較できます。この値をどうすればいいか - これは壁の形に依存します。彼らが正方形の場合、ちょうど反対方向にプレーヤーをバンプします。彼らが長い、または凹面の場合は...数学を行うか、事を単純化するために壁を再設計する。

2

これにはFlixel(www.flixel.org)を使用します。あなたのためにこの種のものを処理する素晴らしい軽量なActionscriptライブラリです。もしあなたがhitFromLeft()、hitFromRight()などを与える衝突をあなた自身が処理したいのであれば、それらの関数名を持っているかもしれませんが考えを得る)