2012-01-12 2 views
0

У меня есть символ, называемый _player mc, который перемещается при нажатии мыши. Мне нужно, чтобы при щелчке камеры камера перемещалась вместе с символом. (Я не хочу, чтобы сцена двигалась), я искал везде, но не мог найти его. как бы я это сделал? это мой код.камера следующий символ в as3

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

public class Main extends MovieClip { 
    // player 

    public var _player:MovieClip; 

    // player settings 
    private var _playerSpeed:Number = 10; 

    // other vars 
    private var _destinationX:int; 
    private var _destinationY:int; 

    //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 my_scrollbar:MakeScrollBar; 

    //$$ 
    public var testnumber:Number = 1; 



    public function Main() { 

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




createPlayer(); 


     // add listeners 
     stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); 
     stage.addEventListener(MouseEvent.CLICK, mouseHandler); 


     //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); 

     my_scrollbar=new MakeScrollBar(scroll_mc,scroll_text); 



    } 
     private function createPlayer():void 
    { 
     _destinationX = stage.stageWidth/2; 
     _destinationY = stage.stageHeight/2; 

     _player = new Player(); 
     _player.x = stage.stageWidth/2; 
     _player.y = stage.stageHeight/2; 
     stage.addChild(_player); 
    } 


    private function enterFrameHandler(event:Event):void 
    { 
     _player.x += (_destinationX - _player.x)/_playerSpeed; 
     _player.y += (_destinationY - _player.y)/_playerSpeed; 
    } 


    private function mouseHandler(event:MouseEvent):void 
    { 
     _destinationX = event.stageX; 
     _destinationY = event.stageY; 

     rotatePlayer(); 
    } 

    private function rotatePlayer():void 
    { 
     var radians:Number = Math.atan2(_destinationY - _player.y, _destinationX - _player.x); 
     var degrees:Number = radians/(Math.PI/180) + 90; 
     _player.rotation = degrees; 
    } 





    //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()*stage.stageHeight; 

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

      addChild(_box); 

     } 

    } 

    public function boxclick(event:MouseEvent):void { 
     var _box:Box=event.currentTarget as Box; 
     logtxt.appendText("You collected " + testnumber + " boxes"); 
     _destinationX = _box.y + 40 + (_player.height/2); 
     _destinationY = _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; 
    } 

} 
} 

ответ

1

Вы можете создать держатель для всех активов: фон, врагов, игроков.

Когда, например, игрок идет вправо, переместите главный держатель влево. Таким образом, фон и все в нем будут прокручиваться влево, но ваш игрок перемещается вправо, и игрок будет визуально оставаться в центре экрана.

Так что ваш держатель и игрок будет иметь противоположные скорости:

player.x += speed; 
holder.x -= speed; 

Это то, что я имею в виду:

Example of game

+0

, но я пытаюсь сделать интерактивную игру с более чем один человек. – thor625

+0

С кем вы имеете в виду, например, врагов? Я отредактировал свой ответ. – Ben

+0

Я имею в виду другого человека, как в mmo – thor625

Смежные вопросы