충돌 감지에 BitmapData를 사용하려했지만 지금까지 실패했으며 그 이유를 모르겠습니다. 코드는 컴파일되지만 아무 것도하지 않습니다 ("hit"을 인쇄해야하는 경우). 누구든지 나를 도울 수 있습니까?BitmapData Collision
var bgBitMapData:BitmapData = new BitmapData(bg.width,bg.height,true,0);
// bgBitMapData is an empty BMP at this point cause its just freshly instanciated
bgMask = bgBitMapData.clone();
wall.x = bg.x;
wall.y = bg.y;
bgMask.draw(wall);
var plBitMapData:BitmapData = new BitmapData(pl.width,bg.height,true,0);
// no idea y you make this plBitMapData anyway
plMask = bgBitMapData.clone();
// now you clone the empty bgBitMapData to be plMask
bgMask.draw(pl);
plMask은 아무것도 채워지지 않습니다 :
package
{
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.display.BitmapData;
import flash.geom.Point;
public class Main extends MovieClip
{
private var spd:int = 5;
private var pressedKeys:Object = {};
private var bgMask:BitmapData;
private var plMask:BitmapData;
private var wall:Wall = new Wall();
public function Main()
{
var bgBitMapData:BitmapData = new BitmapData(bg.width,bg.height,true,0);
bgMask = bgBitMapData.clone();
wall.x = bg.x;
wall.y = bg.y;
bgMask.draw(wall);
var plBitMapData:BitmapData = new BitmapData(pl.width,bg.height,true,0);
plMask = bgBitMapData.clone();
bgMask.draw(pl);
stage.addEventListener(KeyboardEvent.KEY_DOWN,this.keyPressHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,this.keyPressHandler);
stage.addEventListener(Event.ENTER_FRAME,this.gameLoop);
}
public function keyPressHandler(evt:KeyboardEvent):void
{
if (evt.type == KeyboardEvent.KEY_DOWN)
{
pressedKeys[evt.keyCode] = 1;
}
else
{
delete pressedKeys[ evt.keyCode ];
}
}
public function inputHandler():void
{
var moveXBy:int;
var moveYBy:int;
if (pressedKeys[Keyboard.J])
{
moveXBy -= spd;
}
if (pressedKeys[Keyboard.K])
{
moveYBy += spd;
}
if (pressedKeys[Keyboard.L])
{
moveXBy += spd;
}
if (pressedKeys[Keyboard.I])
{
moveYBy -= spd;
}
pl.x += moveXBy;
pl.y += moveYBy;
}
public function playerWallCollision():void
{
if (plMask.hitTest(new Point(wall.x, wall.y), 1, bgMask, new Point(pl.x, pl.y), 1))
{
trace( "hit");
}
}
public function gameLoop(evt:Event):void
{
wallUpdate();
inputHandler();
playerWallCollision();
}
private function wallUpdate()
{
wall.x = bg.x;
wall.y = bg.y;
}
}
}
당신은'와 벽의 좌표계를 혼합하고 plMask'의 당신은'hitTest'를 호출 할 때. 먼저 localToGlobal을 사용하여 globalToLocal을 사용하여 변환하십시오. – Cameron
@Cameron 어떻게해야합니까? 나는 전에 그 기능들을 사용 해본 적이 없다 ... – MKII