我在做一个迷宫游戏。角色不能穿过迷宫的墙壁(因为从角色的位图数据和墙壁的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