2016-09-23 1 views
-1

Was ich versuche zu tun ist, einen neuen Turm jedes Mal auf MouseX und MouseY zu setzen. aber es scheint, dass es nicht funktioniert Any Idea guys?Konnte nicht auf MausKoordinationen hinzufügen

oder wenn Sie ein TileMap-Array erstellen und jedes Mal ein neues Kind von PrototypeTower hinzufügen können, wenn wir auf den Tower klicken (auf x = 50, y = 400), um auszuwählen und zu platzieren, wo immer wir wollen. Wenn ich auf das Kästchen bei x = 50, y = 400 klicke, funktioniert das startDrag() nicht.

Main.as

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.ui.Mouse; 

    public class Main extends Sprite 
    { 
     private var pTower:PrototypeTower = new PrototypeTower; 
     private var zTower:PrototypeTower = new PrototypeTower; 
     private var fTower:PrototypeTower = new PrototypeTower; 
     public function Main() 
     { 
      pTower.x = 50; 
      pTower.y = 400; 
      addChild(pTower); 

      addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
     } 
     private function onAddedToStage(e:Event):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

      pTower.addEventListener(MouseEvent.CLICK, onClicked); 
     } 
     private function onClicked(e:Event):void 
     { 
      removeEventListener(MouseEvent.CLICK, onClicked); 

      zTower.x = mouseX; 
      zTower.y = mouseY; 
      addChild(zTower); 
      zTower.startDrag(); 

      addEventListener(MouseEvent.CLICK, onPlaced); 
     } 
     private function onPlaced(e:Event):void 
     { 
      removeEventListener(MouseEvent.CLICK, onPlaced); 
      zTower.stopDrag(); 
      fTower.x = mouseX 
      fTower.y = mouseY; 

      addChild(fTower); 

     } 
    } 
} 

PrototypeTower.as

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 
    import flash.events.Event; 

    public class PrototypeTower extends MovieClip 
    { 
     public function PrototypeTower() 
     { 
      this.graphics.beginFill(0x00FF00); 
      this.graphics.drawRect(this.x, this.y, 20, 20); 
      this.graphics.endFill(); 
     } 
    } 
} 

Danke, ich total Noob bin, fragen, um von den Tagen!

+0

"* aber es scheint, es funktioniert nicht *" was genau funktioniert nicht? – null

+0

@null korrigieren Sie mich, wenn ich falsch liege, aber muss er nicht einen 'graphics.lineStyle' einstellen, bevor ein Rechteck gezeichnet wird? –

+0

@Neal Davis nur, wenn Sie einen Linienstil festlegen möchten. Bei einer Füllung ohne Linie sollte kein Linienstil angegeben werden, was dem Verzicht auf den Aufruf dieser Funktion entspricht. – null

Antwort

0

Entschuldigung, dies ist nur ein Schaltplan für jetzt. Ich werde versuchen, es später zu verfeinern, wenn Sie brauchen. Hoffentlich löscht das einige Dinge für Sie aber

Wenn Sie auf den Turm klicken, fügen Sie einen neuen Turm an der x,y der Maus und tun Sie eine Art von startDrag(tower) auf dem neuen Turm, den Sie gerade hinzugefügt haben. Dann, wenn Sie auf der Bühne klicken, wird die Drag stoppen und den neuen X gesetzt, y

bearbeiten

Sie könnten versuchen, alle Ihre removeEventListener loszuwerden ruft

Ich denke, Ihr Problem ist, du bist Entfernen des Ereignis-Listeners, der in Ihrer Hauptfunktion hinzugefügt wird. Beachten Sie, dass die Hauptfunktion (Klassenkonstruktor) für die Dokumentklasse nur einmal aufgerufen wird, also fügen Sie einen Ereignislistener für ADDED_TO_STAGE nur einmal hinzu, und Sie entfernen es dann das erste Mal, wenn Sie versuchen, der Bühne irgendetwas hinzuzufügen, und du legst es nie zurück. Entfernen Sie es nicht zuerst.

Sie rufen an, bevor Sie es zur Bühne hinzufügen. Do addChild(zTower) und dann

+0

Ja, das ist, wonach ich gefragt habe ... aber das Problem ist ... 'zTower.startDrag();' ist nicht Arbeit .. können Sie bitte ein Skript machen? .. am zweithäufigsten, wenn wir auf den Neuen Turm klicken (wir haben auf der Bühne hinzugefügt), sollte es einen "Entfernen" Knopf direkt darunter haben ..und wenn wir auf die Bühne zurück klicken (anstatt auf die Schaltfläche "Entfernen" zu klicken), sollte sie diese Schaltfläche entfernen (unter dem Turm schwebend) –

+0

Überprüfen Sie meine bearbeitete Antwort. Ich denke, ich habe dein Problem bemerkt. –

+0

'zTower.startDrag();' funktioniert nicht, auch nach dem Entfernen 'removeEventListener()' –

Verwandte Themen