我在做一個迷宮遊戲。角色不能穿過迷宮的牆壁(因爲從角色的位圖數據和牆壁的bmd之間的碰撞檢測)。當字符到達一個門,一個新的水平/幀應該用新的迷宮(新邊界)As3如何刪除或更新一個新的級別bitmapdata?
對於下一級(下一個幀)出現,我由具有不同壁的新的迷宮。但是第一個迷宮的位圖數據仍然是「活躍的」。所以即使有一個新的迷宮,以前牆壁的位圖數據也是不可見的,但仍然在舞臺上繪製。
我的問題給你: 我想改變邊界/迷宮的每一幀,我如何刪除以前的位圖數據,使角色不會走過下一個迷宮的界限?或者有可能從不同的'邊界'創建一個數組?
stop();
var isRight:Boolean=false;
var isLeft:Boolean=false;
var isUp:Boolean=false;
var isDown:Boolean=false;
var speed:int = 10;
var mazeRect:Rectangle = bounds.getBounds(this);
var charRect:Rectangle = char.getBounds(this);
var boundsBmpData = new BitmapData(mazeRect.width, mazeRect.height, true, 0);
var charBmpData = new BitmapData(charRect.width, charRect.height, true, 0);
boundsBmpData.draw(bounds);
charBmpData.draw(char);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, moving);
function keyPressed(event:KeyboardEvent):void
{
if(event.keyCode==39){
isRight=true}
if(event.keyCode==37){
isLeft=true}
if(event.keyCode==38){
isUp=true}
if(event.keyCode==40){
isDown=true}
}
function keyReleased(event:KeyboardEvent)
{
if(event.keyCode==39){
isRight=false}
if(event.keyCode==37){
isLeft=false}
if(event.keyCode==38){
isUp=false}
if(event.keyCode==40){
isDown=false}
}
function moving(e: Event): void
{
var newx: Number = char.x - (isLeft ? speed : 0) + (isRight ? speed : 0);
var newy: Number = char.y - (isUp ? speed : 0) + (isDown ? speed : 0);
if(!boundsBmpData.hitTest(new Point(bounds.x, bounds.y),
255,
charBmpData,
new Point(newx, newy),
255))
{
char.x = newx;
char.y = newy;
}
if(char.hitTestObject(door))
{
onHitTest();
}
}
function onHitTest() : void
{
nextFrame();
}
我不知道如何設置FLA文件。如果沒有看到時間線和「邊界」和「門」對象,就很難分辨出發生了什麼。 – iND 2012-01-06 17:37:12
@iND我正在製作時間軸(動作),第一幀動畫片段:角色,邊界和門。繪製字符和邊界的位圖。第二幀是相同的,除了它應該爲新的邊界繪製一個新的位圖。如果可以,我可以上傳FLA? – Opoe 2012-01-06 18:51:32
你可以把一個鏈接到FLA文件。否則,你可以將它發送到我的垃圾郵件:[email protected]。 – iND 2012-01-06 19:12:21