Flash AS3迷宫类型游戏问题
问题描述:
我已经在Flash as3中创建了一个迷宫游戏,并且它作为个人swf很有效。只要我把它放到主容器swf中就会停止工作!那么,它仍然是一种工作,但它失去了迷宫的'界限'。有谁知道我该如何解决这个问题?任何帮助非常apprecaited,S.Flash AS3迷宫类型游戏问题
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.*;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.geom.Rectangle;
import gs.TweenLite;
import gs.easing.*;
public class slide17 extends MovieClip {
private var maze:mazeBG;
private var mazeC:mazeCircle;
var rightArrow:Boolean = false;
var leftArrow:Boolean = false;
var upArrow:Boolean = false;
var downArrow:Boolean = false;
var speed:int = 10;
public function slide17():void {
screen01();
}
private function screen01():void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, stage_onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, stage_onKeyUp);
stage.addEventListener(Event.ENTER_FRAME, stage_onEnterFrame);
maze = new mazeBG();
addChild(maze);
maze.x=88;
maze.y=155;
mazeC = new mazeCircle();
addChild(mazeC);
mazeC.x=104;
mazeC.y=321;
function stage_onKeyDown(event:KeyboardEvent):void {
if(event.keyCode == Keyboard.RIGHT) rightArrow = true;
if(event.keyCode == Keyboard.LEFT) leftArrow = true;
if(event.keyCode == Keyboard.UP) upArrow = true;
if(event.keyCode == Keyboard.DOWN) downArrow = true;
}
function stage_onKeyUp(event:KeyboardEvent):void {
if(event.keyCode == Keyboard.RIGHT) rightArrow = false;
if(event.keyCode == Keyboard.LEFT) leftArrow = false;
if(event.keyCode == Keyboard.UP) upArrow = false;
if(event.keyCode == Keyboard.DOWN) downArrow = false;
}
function stage_onEnterFrame(event:Event):void {
var rect:Rectangle = mazeC.getBounds(stage);
var i:int = 0;
var xBump:int = 0;
var yBump:int = 0;
if(rightArrow) {
xBump = speed;
for(i = 0; i < speed; i++) {
if(maze.hitTestPoint(rect.right + i, mazeC.y, true)) {
xBump = i - 1;
break;
}
}
}
if(leftArrow) {
xBump = -speed;
for(i = 0; i < speed; i++) {
if(maze.hitTestPoint(rect.left - i, mazeC.y, true)) {
xBump = -i + 1;
break;
}
}
}
if(upArrow) {
yBump = -speed;
for(i = 0; i < speed; i++) {
if(maze.hitTestPoint(mazeC.x, rect.top - i, true)) {
yBump = -i + 1;
break;
}
}
}
if(downArrow) {
yBump = speed;
for(i = 0; i < speed; i++) {
if(maze.hitTestPoint(mazeC.x, rect.bottom + i, true)) {
yBump = i - 1;
break;
}
}
}
mazeC.x += xBump;
mazeC.y += yBump;
}
}
}
}
答
你行:
var rect:Rectangle = mazeC.getBounds(stage);
使用阶段对象来获取你的MazeCircle的区域。当您将游戏添加到包装swf(您的主容器swf)时,舞台对象现在成为包装的阶段。如果包装的尺寸与您的游戏瑞士法郎不同,您致电getBounds()
将返回时髦的坐标。
当舞台对象发生变化时,您需要的东西是一致的,以此来衡量。还有,你能解决这几个方面:
-
使用
Sprite
或MovieClip
来包装你的游戏,并使用与getBounds()
替代阶段。您可以使用this
关键字使用您工作的slide_17
实例。例如:var rect:Rectangle = mazeC.getBounds(this);
使用比
getBounds()
以外的功能,以确定您的MazeCircle的区域,例如,使用特性x
,y
,width
和height
来代替。让我知道,如果你想要一个这样的例子,但我敢打赌你可以弄明白 - 将它包括在这里将是漫长的。
希望有帮助!
你能更好地定义“绑定”吗? – AsTheWormTurns
我认为问题在于你从舞台上获得了界限。 var rect:Rectangle = mazeC.getBounds(stage);当你一个人运行它时,舞台可供你使用。当从另一个swf加载swf时,它不是。 – Frank