2017-06-19 5 views
-1

J'utilise ce code pour déplacer une image lorsque vous appuyez sur W, A, S et D.Obtenir une image pour déplacer dans AS3

package 
{ 
    import com.adobe.tvsdk.mediacore.CustomRangeType; 
    import flash.display.Bitmap; 
    import flash.display.BitmapEncodingColorSpace; 
    import flash.display.Shape; 
    import flash.display.Sprite; 
    import flash.display.Stage; 
    import flash.events.AsyncErrorEvent; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.events.NetStatusEvent; 
    import flash.events.TimerEvent; 
    import flash.media.Video; 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 
    import flash.system.ImageDecodingPolicy; 
    import flash.ui.Keyboard; 
    import flash.utils.ByteArray; 
    import flash.utils.Timer; 

    public class Main extends Sprite { 

     public var xcoord:int = 50; 
     public var ycoord:int = 50; 
     public var movingUp:Boolean; 
     public var movingDown:Boolean; 
     public var movingLeft:Boolean; 
     public var movingRight:Boolean; 
     public var onFrontPage:Boolean; 
     public var onDiner:Boolean; 
     public var clock:Timer = new Timer(15, 0); 
     // Image Initializations 
     public var player:Bitmap = new Assets.hariidle1 as Bitmap; 

     public var dinerBackground:Bitmap = new Assets.diner as Bitmap; 
     public var hariIdle1:Bitmap = new Assets.hariidle1 as Bitmap; 
     public var hariIdle2:Bitmap = new Assets.hariidle2 as Bitmap; 

     public function Main():void {  
      if (stage){ 
       init(); 
      } else { 
       addEventListener(Event.ADDED_TO_STAGE, init); 
      } 

      // Set booleans to true 

      onFrontPage = true; 


      addChild(Assets.video); 

      var nc:NetConnection = new NetConnection(); 
      nc.addEventListener(NetStatusEvent.NET_STATUS , onConnect); 
      nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR , trace); 


      var metaSniffer:Object=new Object(); 
      nc.client=metaSniffer; 
      metaSniffer.onMetaData=getMeta; 
      nc.connect(null); 

     } 
     public function init(e:Event = null):void { 
      stage.removeEventListener(Event.ADDED_TO_STAGE, init); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 
      stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); 
      clock.addEventListener(TimerEvent.TIMER, gameLoop); 
      clock.start(); 

     } 
     private function asyncErrorHandler(event:AsyncErrorEvent):void { 
      // ignore error 
     } 
     private function getMeta (mdata:Object):void { 
      Assets.video.width=1280; 
      Assets.video.height=720; 
     }; 

     private function onConnect(e:NetStatusEvent):void { 
      if (e.info.code == 'NetConnection.Connect.Success') { 
       trace(e.target as NetConnection); 
       var ns:NetStream = new NetStream(e.target as NetConnection); 

       ns.client = {}; 
       var file:ByteArray = new Assets.bytes(); 
       ns.play(null); 

       ns.appendBytes(file); 
       Assets.video.attachNetStream(ns); 
      } 

     } 
     private function gameLoop(evt:Event):void { 


       // Draw diner background 
       if (!onFrontPage && !onDiner){ 
        onDiner = true; 
        addChild(dinerBackground); 
        addChild(player); 
       } 
       if (!onFrontPage){ 
        removeChild(Assets.video); 
       } 
       if (movingUp){ 
        player.y += 50; 
        moveUp(); 
       } 
       if (movingDown){ 
        player.y -= 50; 
        moveDown(); 
       } 
       if (movingLeft){ 
        player.x += 50; 
        moveLeft(); 
       } 
       if (movingRight){ 
        player.x -= 50; 
        moveRight(); 
       }    
     } 
     public function moveUp():void { 
      player.y += 50; 
     } 
     public function moveDown():void { 
      player.y -= 50; 
     } 
     public function moveLeft():void { 
      player.x += 50; 
     }  
     public function moveRight():void { 
      player.x -= 50; 
     } 
     public function onKeyDown(e:KeyboardEvent):void { 
      if (onFrontPage){ 
       onFrontPage = false; 
      } 
      if (e.keyCode == 87){ 
       movingUp = true; 
      } 
      if (e.keyCode == 83){ 
       movingDown = true; 
      } 
      if (e.keyCode == 65){ 
       movingLeft = true; 
      } 
      if (e.keyCode == 68){ 
       movingRight = true; 
      } 
     } 
     public function onKeyUp(e:KeyboardEvent):void { 
      if (e.keyCode == 87){ 
       movingUp = false; 
      } 
      if (e.keyCode == 83){ 
       movingDown = false; 
      } 
      if (e.keyCode == 65){ 
       movingLeft = false; 
      } 
      if (e.keyCode == 68){ 
       movingRight = false; 
      } 
     } 
    } 

} 

Il y a une autre classe appelée actifs qui a tous les images initialisées. En appuyant sur W, A, S et D, l'image "player" ne bouge pas.

Comment puis-je faire bouger l'image lorsque vous appuyez sur les touches fléchées?

EDIT: J'ai changé le code pour ce qui a été suggéré. Le personnage ne bouge toujours pas.

Répondre

0

Vos drapeaux sont tous en désordre. Votre code doit les définir à false sur un événement keyUP et à true sur un événement keydown. De plus, vous ajoutez deux écouteurs sur le clavier, l'un met les drapeaux à true et un à false. Décide toi!

En note, pas besoin d'appeler addChild() dans une boucle de jeu, ceux-ci devraient être manipulés dans les écouteurs pour les objets semi-permanents comme des joueurs. Enfin, vous appelez stage dans le constructeur, en cliquant sur "Stage is unavailable" et en désactivant le fonctionnement de vos programmes d'écoute. Vous devez utiliser ce code comme votre seul code Main():

public function Main():void {   
    if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); 
} 

Et votre fonction init devrait commencer comme ceci:

public function init(e:Event=null):void { 
    removeEventListener(Event.ADDED_TO_STAGE, init); 

... et contiennent alors tout le code dans votre Main. Une fois que vous faites tout cela, vous pourriez faire fonctionner votre mouvement. Finalement, ne faites JAMAIS de codage de cargaison, et pensez TOUJOURS à ce que votre code fait et quand il s'appelle AVANT que vous ne frappiez même Compile.

+0

J'ai modifié le code ci-dessus en fonction de ce que vous avez suggéré. Je ne reçois toujours aucun mouvement. – user8134220