2011-11-29 108 views
0

我已經在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

回答

3

你行:

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