2011-06-22 7 views
4

私はプログラミングしているゲームに問題があります。私はセキュリティゲームのいくつかの並べ替えをしていると私は視力のいくつかの視線を持っていると思います。問題は、私の視界を制限することができず、私の警官が壁を透けて見ることができないということです。下には窓が見えるが壁は見えないデザインがあります。あなたの下には、私の問題が正確に描かれています。actionscriptで視線制限を実装する方法は?

design

これは、それが今のように見えるものです。ご覧のように、警官は壁を通して見ることができます。

enter image description here

これは私が視線を制限するために使用したいと思うのマップです。

visual map

下図のように私は今、視線をプログラミングしています方法は、単にいくつかのポイントを計算し、それに応じて姿を描くことです。私はまた、ビットマップデータを使ってヒットテストをチェックして、自分のプレイヤーがいずれかの警官によって発見されたかどうかをチェックします。

private function setSight(e:Event=null):Boolean 
{ 
    g = copCanvas.graphics; 
    g.clear(); 

    for each(var cop:Cop in copCanvas.getChildren()) 
    { 
     var _angle:Number = cop.angle; 
     var _radians:Number = (_angle * Math.PI)/180; 
     var _radius:Number = 50; 

     var _x1:Number = cop.x + (cop.width/2); 
     var _y1:Number = cop.y + (cop.height/2); 
     var _baseX:Number = _x1 + (Math.cos(_radians) * _radius); 
     var _baseY:Number = _y1 - (Math.sin(_radians) * _radius); 

     var _x2:Number = _baseX + (25 * Math.sin(_radians)); 
     var _y2:Number = _baseY + (25 * Math.cos(_radians)); 
     var _x3:Number = _baseX - (25 * Math.sin(_radians)); 
     var _y3:Number = _baseY - (25 * Math.cos(_radians)); 

     g.beginFill(0xff0000, 0.3); 
     g.moveTo(_x1, _y1); 
     g.lineTo(_x2, _y2); 
     g.lineTo(_x3, _y3); 
     g.endFill(); 
    } 

    var _cops:BitmapData = new BitmapData(width, height, true, 0); 
    _cops.draw(copCanvas); 

    var _bmpd:BitmapData = new BitmapData(10, 10, true, 0); 
    _bmpd.draw(me); 

    if(_cops.hitTest(new Point(0, 0), 10, _bmpd, new Point(me.x, me.y), 255)) 
    { 
     gameover.alpha = 1; 
     setTimeout(function():void{ gameover.alpha = 0; }, 5000); 
     stop(); 

     return true; 
    } 

    return false; 
} 

だから今、私の質問は:警官は、壁に目を通すことができないようにビューを制限する方法を知っている人はありますか?ありがとうございます。

ps:私は既にemanuele feronatoさんのチュートリアルthisを見ていますが、視覚の視線を制限するコードを使用することはできません。

+0

あなたは裕福gamedev.stackexchange.comにオーバー掲載される可能性があります:) – Harold

+0

私は、あまりにもそこにヒントのおかげで、それを投稿します:) –

+0

あなたが最初の距離をテストするかもしれません毎回ピクセルを描画するのを避けるためにプレーヤーに。 – alxx

答えて

1

視界のコーンとは無関係に、Feronatoの見通し線のコードを使用して、円錐の描き方に関係なく、プレーヤーの視認性が正しく機能するようにすることをお勧めします。壁に当たった場合、複雑な数学が多くなり、おそらくリアルタイムではプロセッサが集中しすぎるでしょう。

この時点では、壁にカットされた円錐形のビジュアルを得ることは、多くの作業になる可能性があり、必要ではない可能性があるため、「何でもよい」と言いたいことがあります。プレーヤーが混乱しているかどうかを確認するためにプレイテストをする必要があります。 、カットオフ壁でコーンはあなたが表示スタックにコーンの上に上げることができ、別のグラフィック対象となる各部屋の床のためになるようにする最も簡単な方法を述べ

。ガードが部屋を見て、コーンを覆うために床を上げる必要があるかどうかを判断し、コーンを表示するために床を下げる必要があるかどうかを確認します。

あなたはおそらく(レベルのロード中にすべてが魔法のようにセットアップされます。すなわち)このフロアオブジェクトの作成を自動化することができますがレベルを描画するときに最初のパスのために私はおそらくそれらを手動で入れるでしょう。 alxxが提案されているよう

は*ちなみに、あなたはおそらく唯一の最初のラフな距離のチェックを行った後、正確なチェックをしたいです。正確な小切手を多すぎると費用がかかる可能性があります。

+0

あなたの答えをありがとう。しかし、これを行う方法があります(gamedev-forumで答えが見つかりました)。 http://gamedev.stackexchange.com/questions/14001/how-to-implement-line-of-sight-restriction-in-actionscript –

+0

その男のコードが非常に印象的であることを見ることができます。 – jhocking

2

非常に高いレベルでは、検出されたときはどうなりますか、検出した警官からの光線とプレイヤーを狙ってみてください。レベルに影響を与えずに光線を撃つことができれば、有効な検出ができます。これはさまざまな方法で実装できますが、これが標準的なアプローチです。

+0

は、プレーヤーが見えないのは難しくありません。警官の視線を制限して壁に止まるようにしたかっただけです。誰かがgamedev-forumでこの質問に答えました。あなたがしたい場合は、見てみることができます:) http://gamedev.stackexchange.com/questions/14001/how-to-implement-line-of-sight-restriction-in-actionscript –

+0

右、私は誤解してあなただけのことを考えたロジックが必要であり、グラフィカルなエフェクトもコリジョンマップによって変更されませんでした。乾杯。 –

関連する問題