【发布时间】:2011-02-19 09:39:30
【问题描述】:
几个星期以来,我一直在尝试制作我的自上而下的游戏。有一段时间进展顺利,但后来我想创建一个到处都是墙壁的滚动地图。现在,为了方便创建地图(稍后添加更多),我创建了一个名为“Wall”的类,我将对其进行测试。这有效,当它命中时,地图必须停止滚动。确实如此,到目前为止还不错。
现在,当玩家离开对象时,我希望地图能够再次滚动,这也可以,但是现在玩家无法移动到玩家来自的一侧。我知道这是因为我需要定义玩家进入的边,以便告诉游戏此时必须将哪个动作设置为零。
您可以在此处查看代码:
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。但是,这不是一个好的解决方案,如果您继续向上或向下远离电影剪辑,您仍然无法再正确...
我为此困惑了很长时间,所以我认为是时候寻求帮助了。我找不到任何关于如何在自上而下的游戏中使用滚动地图+墙来控制移动的信息:/
【问题讨论】:
标签: actionscript-3 collision-detection