我想创建一个玩家对象的边界,用箭头键控制,在我的游戏中使用主舞台的高度和宽度。例如,一个测试点位于玩家对象的边界框的顶部边缘,以便当玩家对象的头部接触到舞台的顶部边缘时,玩家不能再向北移动。玩家对象通过使用Flash舞台编辑器手动实例化到舞台的中心,因此它将在程序启动之前从中心开始。使用hitTestPoint()与舞台对象创建对象的边界
问题是,在程序开始时,我不能再用箭头键向上或向下移动播放器对象,但我仍然可以左右移动它。其目的是让玩家向北移动,直到玩家对象的头部接触主舞台的顶部边缘。下面的代码:
package
{
public class Main_Playground extends MovieClip
{
var vx:int;
var vy:int;
public function Main_Playground()
{
init();
}
function init():void
{
//initialize variables
vx = 0;
vy = 0;
//Add event listeners
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function onKeyDown(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
vx = -5;
}
else if (event.keyCode == Keyboard.RIGHT)
{
vx = 5;
}
else if (event.keyCode == Keyboard.UP)
{
vy = -5;
}
else if (event.keyCode == Keyboard.DOWN)
{
vy = 5;
}
}
function onKeyUp(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT || event.keyCode == Keyboard.RIGHT)
{
vx = 0;
}
else if (event.keyCode == Keyboard.DOWN || event.keyCode == Keyboard.UP)
{
vy = 0;
}
}
function onEnterFrame(event:Event):void
{
//Move the player
player.x += vx;
player.y += vy;
//determine top boundary
if (! stage.hitTestPoint(player.x, (player.y-(player.height/2)), true)){
player.y -= vy;
}
}
}
}
我已经使用其他方法成功,但我很好奇'hitTestPoint`如何工作。我已经将hitTestPoint的第三个参数设置为false。玩家对象现在可以向北移动,而不是停在舞台的边缘,而是被与玩家对象高度相同的不可见屏障阻挡。在“hitTestPoint”的第二个参数中,我将`player.height`分为4,而玩家对象在向北行进时会离开舞台边界。 – user701510 2011-12-15 08:26:39