벽을 감지하면 거의 모든 것을 시도하여 캐릭터를 멈추게했습니다. 위쪽 및 아래쪽과 왼쪽에서만 작동하지만 모든 4 방향에서 작동하지 않으므로 한 번의 동작과 한 번의 x 번 동작 만 가능합니다. 그래서 각 방향에 하나씩 4 가지 기능을 만들기로 결정했습니다. 하지만 왼쪽 키를 누르고 벽에 부딪 힐 때만 작동합니다.AS3 캐릭터는 한 방향으로 만 벽에서 멈 춥니 다.
내 질문에 대한 답변입니다. 충돌 감지로 인해 캐릭터가 4 방향으로 움직이지 않도록하려면 어떻게해야합니까? 귀하의 코드가 수행하는 비트와 spagetti-Y 때문에 어렵다,하지만 기능의 가능성을 제거하는 것 대신에 (5)의 한 기능으로 모든 ENTER_FRAME 코드를 이동하려고 할
var leftArrow:Boolean;
var upArrow:Boolean;
var rightArrow:Boolean;
var downArrow:Boolean;
var speed:int = 10;
var hitting:Boolean;
var ismoving:Boolean;
var wallsRect:Rectangle = bounds.getBounds(this);
var charRect:Rectangle = char.getBounds(this);
var boundsBmpData = new BitmapData(wallsRect.width, wallsRect.height, true, 0);
var charBmpData = new BitmapData(charRect.width, charRect.height, true, 0);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, detectHit2);
stage.addEventListener(Event.ENTER_FRAME, walkingLEFT);
stage.addEventListener(Event.ENTER_FRAME, walkingUP);
stage.addEventListener(Event.ENTER_FRAME, walkingDOWN);
stage.addEventListener(Event.ENTER_FRAME, walkingRIGHT);
boundsBmpData.draw(bounds);
charBmpData.draw(char);
function keyPressed(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
leftArrow = true;
}
if (event.keyCode == Keyboard.UP)
{
upArrow = true;
}
if (event.keyCode == Keyboard.RIGHT)
{
rightArrow = true;
}
if (event.keyCode == Keyboard.DOWN)
{
downArrow = true;
}
}
function keyReleased(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.LEFT)
{
leftArrow = false;
}
if (event.keyCode == Keyboard.UP)
{
upArrow = false;
}
if (event.keyCode == Keyboard.RIGHT)
{
rightArrow = false;
}
if (event.keyCode == Keyboard.DOWN)
{
downArrow = false;
}
}
function walkingLEFT(event:Event):void
{
if (leftArrow && ! hitting)
{
char.x -= speed;
}else
{
hitting = false;
ismoving = false;
}
}
function walkingRIGHT(event:Event):void
{
if (rightArrow && ! hitting)
{
char.x += speed;
}else
{
hitting = false;
ismoving = false;
}
}
function walkingUP(event:Event):void
{
if (upArrow && ! hitting)
{
char.y -= speed;
}
else
{
hitting = false;
ismoving = false;
}
}
function walkingDOWN(event:Event):void
{
if (downArrow && ! hitting)
{
char.y += speed;
}
else
{
hitting = false;
ismoving = false;
}
}
function detectHit2(e:Event):void
{
if(boundsBmpData.hitTest(new Point(bounds.x, bounds.y),
255,
charBmpData,
new Point(char.x, char.y),
255))
{
hitting = true;
ismoving = false;
}
else
{
hitting = false;
bounds.filters = [];
}
}
다른 질문 (http://stackoverflow.com/questions/7704312/as3-stop-character-from-moving-through-walls)에서 제공 한 코드는 트릭을 수행해야합니다. –