幾個星期我一直試圖讓我的自上而下的遊戲。它進行得很好,但在某個時候我想創建一個滾動的地圖,牆上到處都是。現在,爲了便於創建地圖(後來添加更多內容),我創建了一個名爲「Wall」的類,我將進行測試。這是有效的,當它點擊時,地圖必須停止滾動。到目前爲止它確實如此。的ActionScript 3 - 牆壁不衝突正確
現在,當玩家移動遠離物體,我希望地圖能夠再次滾動,這工作過,但現在玩家無法移動到播放器從附帶的一面。我知道這是因爲我需要定義玩家輸入的邊,以便告訴遊戲哪一個移動必須設置爲零。
你可以看到這裏的代碼:
public function AddWalls(player:MovieClip)
{
WallObjects = new Array();
for (var i:int = 0; i < this.numChildren; i++)
{
var mc = this.getChildAt(i);
if (mc is Wall)
{
var wallobj:Object = new Object();
wallobj.mc = mc;
wallobj.leftside = mc.x;
wallobj.rightside = mc.x + mc.width;
wallobj.topside = mc.y;
wallobj.bottomside = mc.y + mc.height;
wallobj.width = mc.width;
wallobj.height = mc.height;
WallObjects.push(wallobj);
}
}
}
public function EnableCollisionWithWalls():void
{
for (var k:int = 0; k < WallObjects.length; k++)
{
//if (player.y > WallObjects[k].topside && player.y < WallObjects[k].bottomside && player.x > WallObjects[k].leftside && player.x < WallObjects[k].rightside)
if (player.hitTestObject(WallObjects[k].mc))
{
if (player.x > WallObjects[k].leftside && player.x < WallObjects[k].leftside+15)
{
Lefthit = true;
trace(DebugVar);
DebugVar++;
player.x = WallObjects[k].leftside;
Scroll_x = 0;
}
else
if (player.x < WallObjects[k].leftside -1 || (player.y > WallObjects[k].leftside))
{
Lefthit = false;
}
if (player.hitTestObject(derp))
{
Lefthit = false;
}
}
}
}
public function EnableMovement():void
{
map.x += Scroll_x;
map.y += Scroll_y;
for (var i:int = 0; i < this.numChildren; i++)
{
var mc = this.getChildAt(i);
if (mc is Wall)
{
mc.x += Scroll_x;
mc.y += Scroll_y;
}
}
}
public function MovementKeysDown(move:KeyboardEvent):void
{
var Speed:int = -5;
switch (move.keyCode)
{
case 37: // venstre knap
Scroll_x = -Speed;
break;
case 38: // op
Scroll_y = -Speed;
break;
case 39: // højre knap
Scroll_x = Speed;
if (Lefthit)
{
Scroll_x = 0;
}
break;
case 40: // ned
Scroll_y = Speed;
break;
default:
}
}
public function MovementKeysUp(move:KeyboardEvent):void
{
switch (move.keyCode)
{
case 37:
Scroll_x = 0;
break;
case 38:
Scroll_y = 0;
break;
case 39:
Scroll_x = 0;
break;
case 40:
Scroll_y = 0;
break;
default:
}
}
可能是一些語法錯誤(因爲我刪除了在此編輯器的一些代碼)。 您可以看到current version here。
在這個版本的滾動持續使用時間長。我確實想出了一個「解決方案」,通過檢查玩家是否距離動畫片夾1個像素,在命中測試中(出於某種原因,這是出於某種原因,我猜測它不應該,因爲它沒有命中),然後將Lefthit設置爲false。然而,這不是一個好的解決方案,如果你繼續向上或向下遠離動畫片段,你仍然無法繼續向右走......
我一直對此很困惑,所以我想那時我正在尋求幫助。我找不到如何控制運動自上而下的遊戲,具有滾動地圖+牆什麼:/
我的第一個方法其實不是hitTest,而是座標。儘管如此,我還是無法讓玩家在沒有任何一個的情況下撞牆。導致遊戲繼續將當前命中轉爲錯誤,所以牆仍然移動,或者,目前的方向,你將無法再次前往:/ – Code