我正在制作一个迷宫游戏。角色无法穿过迷宫的墙壁(因为角色的位图数据与墙壁的bmd之间存在碰撞检测)。当角色到达门时,下一个等级/框架应该出现一个新的迷宫(新界限)
对于下一个级别(下一帧),我用不同的墙壁制作了一个新的迷宫。但是第一个迷宫中的bitmapdata仍然是“活跃的”。因此,即使有一个新的迷宫,前面墙壁的位图数据也是看不见的,但仍然在舞台上绘制。
我的问题是: 我想改变每一帧的边界/迷宫,我怎样才能删除之前的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();
}
答案 0 :(得分:1)
在查看FLA之后,有一些问题。
bounds
对象,door
对象和char
对象的指针。所以你仍然以编程方式与旧版本绑定,尽管不是在视觉上。
setupFrame()
的方法中,并使用onHitTest()
方法调用它。onHitTest()
中添加了一个检查,以确保在设置框架之前当前框架中存在bounds
对象。如果没有,游戏就会停止。char
对象现在使用startPts
数组中的点重新定位每个帧,而不是每次都重新创建它。这是创建简单游戏引擎的一项非常好的工作。只是fyi,gamedev.stackexchange.com是一个致力于各个级别的游戏开发的地方,你可以在那里提出更多的理论问题。
HTH!