2012-01-17 51 views
0

好吧,所以我有一個character_mc,移動鼠標點擊,logtxt dyanamic文本框和mc命名$框。相機跟隨角色,當日志和$盒保持放置時。移動一個對象在另一個在as3

我希望他們留在舞臺上的同一點(意思是我希望他們留在相機的相同位置)我想知道我可能會爲此做些什麼?我試圖把它們放在一個影片剪輯中,但它並沒有真正縫合,所以我放棄了這個想法。

繼承人的代碼:

package { 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.display.Stage; 

    public class Main extends MovieClip { 
     // player 

     public var characterEndMC:MovieClip = new charEndMC(); 

     //box 
     private var boxAmount:Number=0; 
     private var boxLimit:Number=20; 
     private var _root:Object; 
     //$txt 
     public var money:int=0; 
     public var gold:int=0; 

     //$$ 
     public var testnumber:Number=1; 
     //enemy1 
     private var e01Amount:Number=0; 
     private var e01Limit:Number=2; 



     public function Main() { 


      $box.click$.move$.buttonMode=true; 
      $box.click$.clickmini$.buttonMode=true; 


      character_mc["charAngle"]=0; 
      character_mc["moveX"]=0; 
      character_mc["moveY"]=0; 
      character_mc["walkSpeed"]=7; 
      stage.addEventListener(MouseEvent.CLICK, charMove); 

      //box add listener 
      addEventListener(Event.ENTER_FRAME, eFrame); 

      //moneybox 
      $box.click$.move$.addEventListener(MouseEvent.MOUSE_DOWN, startmoving$); 
      $box.click$.move$.addEventListener(MouseEvent.MOUSE_UP, stopmoving$); 
      $box.click$.clickmini$.addEventListener(MouseEvent.CLICK, c$mini); 



     } 



     public function charLoop(event:Event) { 
      if (character_mc.hitTestPoint(character_mc["charEnd"].x,character_mc["charEnd"].y,true)) { 


       character_mc["moveX"]=0; 
       character_mc["moveY"]=0; 
       this.removeChild(character_mc["charEnd"]); 
       character_mc.removeEventListener(Event.ENTER_FRAME, charLoop); 



      } 


      for (var i:int = 0; i < this.numChildren; i++) { 
       this.getChildAt(i).x-=character_mc["moveX"]; 
       this.getChildAt(i).y-=character_mc["moveY"]; 

      } 

      character_mc.x+=character_mc["moveX"]+.05; 
      character_mc.y+=character_mc["moveY"]+.05; 


     } 

     public function lookAtMouse() { 
      var characterMC:MovieClip=character_mc; 
      characterMC["charAngle"] = Math.atan2(this.mouseY - characterMC.y, this.mouseX - characterMC.x)/(Math.PI/180); 

      characterMC.rotation=characterMC["charAngle"]; 
     } 
     public function charMove(event:MouseEvent) { 
      lookAtMouse(); 
      this.addChild(characterEndMC); 
      characterEndMC.x=this.mouseX; 
      characterEndMC.y=this.mouseY; 

      character_mc["charEnd"]=characterEndMC; 
         character_mc["charEnd"].visible = false; 


      character_mc["moveX"]=Math.cos(character_mc["charAngle"]*Math.PI/180)*character_mc["walkSpeed"]; 
      character_mc["moveY"]=Math.sin(character_mc["charAngle"]*Math.PI/180)*character_mc["walkSpeed"]; 



      character_mc.addEventListener(Event.ENTER_FRAME, charLoop); 


     } 


     //boxadding 
     private function eFrame(event:Event):void { 
      if (boxAmount<boxLimit) { 
       boxAmount++; 

       var _box:Box=new Box ; 
       _box.addEventListener(MouseEvent.CLICK,boxclick); 
       _box.buttonMode=true; 
       _box.y=Math.random()* (1000 + _box.height/2); 

       _box.x=Math.random()* (1000 + _box.width/2); 

       addChild(_box); 

      } 
      if (e01Amount<e01Limit) { 
       e01Amount++; 

       var Enemy1:enemy01=new enemy01 ; 
       Enemy1.addEventListener(MouseEvent.CLICK, en01click); 
       Enemy1.buttonMode=true; 
       Enemy1.y=Math.random()*stage.stageHeight; 

       Enemy1.x=Math.random()*stage.stageWidth; 

       addChild(Enemy1); 

      } 

     } 

     public function boxclick(event:MouseEvent):void { 

      var _box:Box=event.currentTarget as Box; 
      logtxt.appendText("You collected " + testnumber + " boxes" + "\n"); 
      character_mc["moveX"] = _box.y + 40 + (height/2); 
      character_mc["moveY"]=_box.x; 


      logtxt.scrollV=logtxt.maxScrollV; 
      var randVal$:Number=Math.random(); 
      if (randVal$>=0.49) { 
       money+=100; 
      } else if (randVal$ <= 0.50 && randVal$ >= 0.15) { 
       money+=200; 
      } else if (randVal$ <= 0.14 && randVal$ >= 0.02) { 
       gold+=10; 
      } else if (randVal$ == 0.01) { 
       money+=200; 
       gold+=20; 
      } 


      testnumber++; 



      boxAmount--; 


      $box.box$in.box$insins.Moneytxt.text=String(money); 
      $box.box$in.box$insins.Goldtxt.text=String(gold); 
      removeChild(_box); 

     } 

     private function startmoving$(event:MouseEvent):void { 
      $box.startDrag(); 
     } 
     private function stopmoving$(event:MouseEvent):void { 
      $box.stopDrag(); 
     } 
     private function c$mini(event:MouseEvent):void { 
      $box.click$.move$.visible=false; 
      $box.box$in.visible=false; 

      $box.y=200; 
      $box.x=100; 
      $box.click$.clickmini$.addEventListener(MouseEvent.CLICK, reclickbox$); 
      $box.click$.clickmini$.removeEventListener(MouseEvent.CLICK, c$mini); 


     } 
     private function reclickbox$(event:MouseEvent):void { 
      $box.click$.clickmini$.addEventListener(MouseEvent.CLICK, c$mini); 
      $box.click$.clickmini$.removeEventListener(MouseEvent.CLICK, reclickbox$); 
      $box.y=70; 
      $box.x=250; 
      $box.click$.move$.visible=true; 
      $box.box$in.visible=true; 
     } 

     public function scroll_text(n:Number) { 

      logtxt.scrollV = Math.round((logtxt.maxScrollV - 1) * n) + 1; 
     } 

     public function en01click(event:MouseEvent) { 

     } 


     } 

    } 

回答

1

你可以做的是把所有相關的對象使用精靈自己的層上。

這是一個有點難以理解,你在你的例子在做什麼,但這裏的 的你可以做什麼一個簡單的例子:

// Add all your game related objects to this Sprite - characters, enemies etc. 
private var cameraContainer:Sprite = new Sprite 
// Add all your hud objects to this Sprite - logtxt, $box etc. 
private var hudContainer:Sprite = new Sprite(); 

public function Main() { 
    cameraContainer.addChild(character_mc); 
    cameraContainer.addChild(enemy01); 
    cameraContainer.addChild(enemy02); 
    ... 

    hudContainer.addChild(logtxt); 
    hudContainer.addChild($box); 
} 

public function charLoop(event:Event) { 
    // Here you should not move all the objects relative to the player but instead 
    // move the player and then move the camera relative to the player 
    character_mc.x += character_mc['moveX']; 
    character_mc.y += character_mc['moveY']; 

    // Reposition the camera and everything else will move 
    // - Add half the screen size to centre the player on the screen 
    cameraContainer.x = -character_mc.x + halfScreenWidth; 
    cameraContainer.y = -character_mc.y + halfScreenHeight; 
} 
+0

我真的不明白你能解釋一下。 – thor625 2012-01-19 00:55:05

+0

你不明白的是什麼? – cmann 2012-01-19 08:09:39

相關問題