В течение нескольких недель я пытался сделать свою игру сверху вниз. Некоторое время все шло хорошо, но потом мне захотелось создать карту прокрутки со стенами повсюду. Теперь, чтобы упростить создание карты (и добавить позже), я создал класс под названием «Стена», который я проверю. Это работает, когда она попадает, карта должна перестать прокручиваться Это так хорошо до сих пор.
Теперь, когда игрок отходит от объекта, я хочу, чтобы карта снова могла прокручиваться, это тоже работает, но теперь игрок не может двигаться в ту сторону, откуда пришел игрок. Я знаю, что это потому, что мне нужно определить стороны, куда входит игрок, чтобы сообщить игре, какое движение должно быть установлено на ноль в этой точке.
Вы можете увидеть код здесь:
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:
}
}
Могут быть некоторые синтаксические ошибки (так как я удалил некоторый код в этом редакторе).
Вы можете увидеть текущую версию здесь .
В этой версии свиток продолжается. Я придумал «исправление» для этого, проверив, находится ли проигрыватель на расстоянии 1 пикселя от мувиклипа, в тесте на попадание (что по какой-то причине работает, что, по-моему, не должно, так как больше не срабатывает) ), а затем установив для левши значение false. Однако это не очень хорошее решение, и если вы продолжите подниматься или опускаться из мувиклипа, вы все равно не сможете двигаться дальше ...
Меня это очень долго сбивало с толку, поэтому я подумал, что пришло время обратиться за помощью. Я не смог найти ничего о том, как управлять движением в нисходящей игре, с картой прокрутки + стена: /