壁を検出したときに私のキャラクターを止めるためにほとんどすべてを試みました。 これは、上向き、右向き、下向き、左向きにしか動作しますが、すべての4方向では動作しませんので、動きは1回、動きは1回だけです。 私は4つの機能を各方向に1つずつ作成することに決めました。 しかし、それは左のキーが押されて壁に当たったときにのみ機能します。AS3キャラクターは一方向の壁にしか止まらない
私の質問はあなたです。衝突検出がキャラクターを4つの方向すべてに動かすのを止めるためには何が必要ですか?あなたのコードが従うことがビットのスパゲッティ-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)で提供されたコードは、このトリックを行う必要があります:) –