2011-06-22 45 views
4

我有編程遊戲的問題。我正在製作某種安全遊戲,我希望有一些視覺上的視線。問題是我無法限制我的視線,所以我的警察無法看穿牆壁。下面你會發現他們可以通過窗戶看到的設計,而不是牆壁。進一步在下面,您可以找到我的問題確切的例子。如何在actionscript中實現視線限制?

design

這是什麼樣子了。正如你所看到的,警察可以看穿牆壁。

enter image description here

這是地圖我會想使用限制的視線。

visual map

所以我編程的視線的方式,現在只是通過計算一些點,並相應地繪製視線,如下圖所示。請注意,我還檢查了使用bitmapdata的hittest來檢查我的玩家是否被任何警察發現。

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論壇上找到答案)。你可以看看http://gamedev.stackexchange.com/questions/14001/how-to-implement-line-of-sight-restriction-in-actionscript –

+0

那傢伙的代碼非常令人印象深刻,謝謝 – jhocking

2

在一個非常高的水平,那當你有一個檢測,嘗試從做了檢測和玩家警察拍攝光線。如果您可以在不影響任何關卡的情況下拍攝光線,則可以進行有效的檢測。你可以通過多種方式來實現,但這是標準方法。

+0

檢測是否不是玩家可以看到並不難,我只是想限制警察的視線錐,所以它會停在牆上。有人在gamedev論壇上回答了這個問題。你可以看看,如果你想:) http://gamedev.stackexchange.com/questions/14001/how-to-implement-line-of-sight-restriction-in-actionscript –

+0

對,我誤解了,並認爲你只是想要的邏輯,而不是碰撞圖也修改的圖形效果。乾杯。 –

相關問題