Flash AS3迷宫类型游戏问题

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; 
     } 

    }   

} 
} 
+0

你能更好地定义“绑定”吗? – AsTheWormTurns

+1

我认为问题在于你从舞台上获得了界限。 var rect:Rectangle = mazeC.getBounds(stage);当你一个人运行它时,舞台可供你使用。当从另一个swf加载swf时,它不是。 – Frank

你行:

var rect:Rectangle = mazeC.getBounds(stage); 

使用阶段对象来获取你的MazeCircle的区域。当您将游戏添加到包装swf(您的主容器swf)时,舞台对象现在成为包装的阶段。如果包装的尺寸与您的游戏瑞士法郎不同,您致电getBounds()将返回时髦的坐标。

当舞台对象发生变化时,您需要的东西是一致的,以此来衡量。还有,你能解决这几个方面:

  1. 使用SpriteMovieClip来包装你的游戏,并使用与getBounds()替代阶段。您可以使用this关键字使用您工作的slide_17实例。例如:

    var rect:Rectangle = mazeC.getBounds(this);

  2. 使用比getBounds()以外的功能,以确定您的MazeCircle的区域,例如,使用特性xywidthheight来代替。让我知道,如果你想要一个这样的例子,但我敢打赌你可以弄明白 - 将它包括在这里将是漫长的。

希望有帮助!

+0

非常感谢伊恩的回答;不幸的是,我无法得到任何一种工作方式 - 我将如何着手让option2工作? – ss888

+0

不用担心 - 已经排序 - 非常感谢! – ss888

+0

很高兴听到您的声音!很好的工作:) – Ian