Flashhilfe.de - Flash Community

Wenn Movieclip von Bühne verschwindet -> zeige neuen Movieclip am Bühnenrand [Flash 10]

 


AntwortenRegistrieren Seite1  

eikjuh#1
Benutzerbild von eikjuh
Beiträge: 6
Registriert: Sep 2011

15.09.2011, 17:04

Hallo!

Ich stehe auf dem Schlauch und hoffe, daß einer von euch mir weiterhelfen kann :)

Szenario: Map-Navigation/ -Interaktion für Landwirte

Ablauf:

1. Movieclip (mc_acker, Bild von einer großen Landschaft, ähnlich GoogleMaps mit 3000x5000px) wird aus Biblio geladen und zur Bühne hinzugefügt.

2. Externe XML-Datei wird eingelesen, diese enthält die Koordinaten der Felder.

3. Felder (ebenfalls MC´s) werden anhand ihrer Koordinaten, die sich auf das Koordinatensystem von mc_acker beziehen, auf den MC: mc_acker gezeichnet.
   -----> mc_acker.addChild(polygon);

4. Drag&Drop-Funktionailtät der Bühne bezieht sich auf mc_acker : mc_acker.startDrag(); usw.

Problem:

Felder, die nun aufgrund von Drag&Drop oder hereinzoomen in das gefakte Landschaftsbild von der Bühne verschwinden, sollen als "Mini-Ausgabe" - Ihrer Selbst am Bildschirmrand erscheinen, quasie als visuelle Unterstützung um einem Landwirt anzuzeigen, das sich noch Felder außerhalb seines Views (hier Bühne) befinden. Diese neuen Mini-Felder (ebenfalls MC´s) erscheinen also an der Bühnenkante, an der die Original-Felder verschwanden.

Lösung:

Gute Frage - nächste Frage ;-)

Wie mache ich das jetzt am geschicktesten? Es gibt ja direkt keine Warnung wenn ein MC von der Bühne verschwindet, die man sich zu Nutze machen könnte.
Ich hab mir irgendwas mit Koordinaten auslesen zur Laufzeit überlegt,

wenn mc_feld._x >= stage.x dann stage.addChild(miniFeld) .... aber wie gesagt, bis jetzt hab ich noch keine Idee entwickeln können die diese Problematik löst.

Für Ideen und auch 2-3 Zeilen Code wäre ich sehr dankbar!

Beste Grüße, Andre
Schlagwörter: bühne, Koordinaten, Movieclip, stage
Werbung
Beiträge: 0
Registriert: Feb 2016


willie33#2
Benutzerbild von willie33
Beiträge: 147
Wohnort: Qo'noS
Registriert: Nov 2009

16.09.2011, 14:34

Du lädst ja alle MCs zur Laufzeit aus der Bibliothek. Das bedeutet dass diese eine ActionScript-Verknüpfung haben müssen. Dort kannst du dann als Basisklasse eine andere Klasse angeben.
Die neue Basisklasse ist einfach eine Erweiterung von MovieClip, die einige Events abgibt wenn sich die Koordinaten ändern.
Neue Basisklasse (statt flash.display.MovieClip):
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package deinPackage
{
      import flash.display.MovieClip;
      import flash.events.Event;
 
      public class MovieClipExtension extends MovieClip
      {
          override public function set x(value:Number):void
          {
              super.x = value;;
              if (this.stage)
              {
                  if (this.x > this.stage.stageWidth || this.x < (this.width * -1))
                  {
                      this.dispatch(new Event("outOfStage"));
                  }
              }
          }
 
          override public function set y(value:Number):void
          {
              super.y = value;;
              if (this.stage)
              {
                  if (this.y > this.stage.stageHeight || this.y < (this.height * -1))
                  {
                      this.dispatch(new Event("outOfStage"));
                  }
              }
          }
      }
}


Und auf diese Events kannst nun reagieren und die Marker entsprechend setzen.
Loading comments...
eikjuh#3
Benutzerbild von eikjuh
Beiträge: 6
Registriert: Sep 2011

Themenautor/in

19.09.2011, 00:58

Danke!

Werde das mal ausprobieren :)
eikjuh#4
Benutzerbild von eikjuh
Beiträge: 6
Registriert: Sep 2011

Themenautor/in

16.11.2011, 21:28

Hallo willie33,

danke nochmal für deine Antwort! Ich hätte da jetzt aber trotzdem noch eins zwei Fragen weil ich nicht weiter komme!

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
polygon.addEventListener(Event.ENTER_FRAME, KoordCheck);
      mc_ack.addChild(polygon);
   }
   /*---------------------------
   Ueberpruefung der Koordinaten
   ---------------------------*/

   function KoordCheck ():void
   {
        for(var c:int = 0; c < felder_array.length; c ++ )
        {
           //felder_array[c].getX();
         var clickPoint:Point = new Point(felder_array[c].getX(),felder_array[c].getY());
           felder_array[c].setx(clickPoint.x);
           felder_array[c].sety(clickPoint.y);
           //clickPoint.y;
         //trace("Polygon Object Coordinates: " + clickPoint);
         //trace("Stage Coordinates       :  " + polygon.localToGlobal(clickPoint));
         
        }


Wie du siehst, beinhaltet das felder_array "Feld-Objekte" die über gewisse Methoden verfügen wie zum Beispiel getX und getY für die Mittelpunkt-Koordinaten eines einzelnen Feldes.

Deine beiden Methoden "setx" und "sety" brauchen ja jetzt die Werte, nur weiß ich nicht welche. Und wie übergebe ich die? Wenn das klappt, wird dann das Event returned oder langt das so wie bei dir angegeben?
Ich verstehe die erste if-Anweisung deines Codes nicht - if(this.stage) - zur Laufzeit wird das nie true.

HELP! :D
Geändert von eikjuh am 16.11.11 um 21:33 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016



AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de