Dynamische Koordinaten (Instanzierung, Bewegung) mittels XML-Datei

Mahzuni

Mitglied
Hi,

ich hab da ein paar kleiner Probleme mit AS und bräuchte ein paar Tipps:

also es geht um grundlegende Sachen zu Actionscript,

1).ich möchte ein von mir erstelltes Objekt.. oder auch ein Bild in den Movie laden und will dem seine X und Y Koordinaten selber beinflussen, also z.B. ball.jpg soll sinusförmig schwingen.

2) ich habe eine XML Datei eingelesen im ersten Frame. Und möchte z.B. oben genannte Animation laufen lassen, soll ich das lieber im 2ten Frame machen? oder gleich im ersten Frame?..

3) wie 1) nur mit anderen Objekte? (Textfelder, Quadrate, Rechtecke)
4) Transparenz in Actionskript einstellen

Das wären mal einige Frage die mir keine Ruhe geben. Über google kommen soviele unterschiedliche Varianten.. da bekommt man nach ner Zeit Kopfschmerzen..

Wäre für jeden Tipp dankbar, oder vielleicht sogar ne gute Seite um AS Grundlagen lernen zu können

MfG Mahzuni
 
Hi,

1. und 3. Mit den Eigenschaften ._x und ._y kannst Du die Position jedes MovieClips festlegen (schau doch einfach mal in der Referenz unter "MovieClip-Klasse" - dort findest Du alle Eigenschaften und Methoden des MovieClip-Objekts!).

Beispiel zum sinusförmigen Schwingen eines MovieClips:
Code:
this.onEnterFrame = function() {
    meinMC._x = Math.sin(getTimer() / 10000) * 50;
}
In diesem Beispiel wird die Zeit seit Filmbeginn in Milisekunden als "Taktgeber" verwendet; der Teiler (hier: 1000) bestimmt die Frequenz, der Multiplikator (hier: 50) die Amplitude.

2. Dort sollte man nach Möglichkeit überhaupt nichts mit Frames machen. Darf ich fragen, wie Du diese xml-Datei einliest? Ich nehme mal an, mit dem XML-Objekt: In diesem Fall hast Du die Ereignisprozedur "onLoad", die auf das Laden der Daten reagiert. Mit der Zeitleiste hat das absolut nichts zu tun:
Code:
var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
    // Hier sind die Daten da!
}
xm.load("wasauchimmer.xml");

4. ._alpha-Eigenschaft (wie gesagt: Schau in die Hilfe unter "MovieClip"; dort findest Du das alles und noch viel mehr ;)).

Gruß
.
 
Hi,

erstmal danke schön für deine Antwort :)

Irgendwie verstehe ich das mit dem Einlesen nicht so ganz... oder besser gesagt wie es weitergehen soll
Ich hab das so eingelesen wie du geschrieben hast.

Also erstmal kurz was ich eigentlich vorhabe..

Ich hab da ne XML Datei die wie folgt aussieht
XML:
<abschnitt>
    <animation>
        <punkt_1 x="14" y="34">
        <punkt_2 x="14" y="34">
        <punkt_3 x="14" y="34">
    </animation>
    <verbindungen>
        <verbindung_1 n="1" k="2"> // Verbindungslinie zwischen Punkt 1 und 2
        <verbindung_1 n="2" k="3">
    </verbindungen>
</abschnitt>

hier ist nur 1 Abschnitt aber da kommen noch andere hinzu, genauso Punkte und Verbindungen. Es sollen nun irgendwelche Punkte von den x,y Koordinaten des ersten Abschnitts zu den x,y Koordinaten des nächsten Abschnitts animiert werden. Ggf sollen zwischen den Punkten n und k Verbindunglinien reingezeichnet werden.

Ich habe nun die XML Datei eingelesen .. - sollte ich gleich die ganze XML Datei einlesen und in einem Array speichern?
Wie würdet ihr da vorgehen? Bei so einem Problem?
Hoffe dass die Umsetzung nicht allzu umfangreich wird :) da AS noch ziemliches Neuland für mich ist

MfG Mahzuni
 
Zuletzt bearbeitet von einem Moderator:
Hi,

zunächst einmal ist die XML-Datei fehlerhaft (Tags werden nicht geschlossen) und wird in dieser Form überhaupt nicht eingeladen und geparst werden können.

Dann ist mir nicht ganz klar, was Du animieren willst, bzw. was mit diesen Punkten geschehen soll - ich nehme an, es handelt sich um Koordinaten verschiedener MovieClips, aber wo kommt da die Bewegung ins Spiel? Deine Verbindungslinien sollen vermutlich mit Zeichnungsmethoden erstellt werden?
Vielleicht kannst Du mal eine Skizze des Endergebnisses posten.

Nach dem was ich bisher verstanden habe, würde ich folgende xml-Struktur vorschlagen:
Code:
<ani>
    <punkt id="1" x="14" y="34" join="2" />
    <punkt id="2" x="14" y="34" join="3" />
    <punkt id="3" x="14" y="34" join="" />
</ani>
Dann musst Du Dich nicht mit verschiedenen Node-Names herumschlagen und kannst eine beliebige Anzahl Punkte (MovieClips?) pro Animation verwenden. Verbindungen lassen sich über das Attribut "join" angeben, in dem ggf. die ID des Ziels der Verbindung steht (die id-Vergabe kannst Du eigentlich auch sparen, wenn Du alle punkt-Tags fortlaufend (mit 0 beginnend) nummerierst.

Gruß
.
 
Jo :) hatte die "/" nur vergessen :) in dem original sind die drin :)

also das mit dem join sieht mir ein bisschen umständlicher aus, da es ja auch mehrere Verbindungen geben kann. Zum Beispiel 1-2 und 1-3 und 1-4 und... soll irgendwann mal bis zu 100 Knoten haben...

mit den Node namen sollte es doch eigentlich keine Probleme geben oder? Ich dachte ich kann da einfach firstchild.childNode[ 0 ].childNode[ i ] einsetzen um zum Beispiel meine Punkte einzulesen und firstchild.childNode[ 1 ].childNode[ i ] für die Verbindungen?

Die animation sollte am Ende wie folgt aussehen. Man liest die Koordinaten von 2 Abschnitten ein und bewegt dann die Punkte jeweil von den Koordinaten vom ersten Abschnitt zum zweiten.

Verbindungslinien sollten mit Zeichnungsmethoden gemacht werden... oder geht das auch mit Grafiken?.. die könnte ich dann einfaden lassen.. irgendwie :)

Hoffe es ist verständlicher geworden.. ansonsten poste ich morgen mal eine kleine Skizze

MfG Mahzuni
 
Hi,

wenn mehrere Verbindungen von einem Punkt ausgehen können, ist Deine Variante sicher gut geeignet. Die Knoten kannst Du auch wie beschrieben auslesen, aber wozu dann die Nummer im NodeName festhalten? IMHO überflüssig: Indizes bekommst Du über die Reihenfolge des Auslesens.

Ich kann Dir leider auch nicht sagen, wie es konkret weitergehen soll, denn das Endergebnis habe ich nach wie vor nicht vor Augen. ;) Ich warte lieber mal auf Deine Skizze.

Gruß

P.S.: Für die Linien würde ich auf jeden Fall Zeichnungsmethoden verwenden, sonst transformierst Du Dich tot, um die Grafiken richtig zu platzieren ...
.
 
Also hier meine Skizze

skizze.jpg

und der dazu gehörige XML Code

XML:
      <abschnitt>
          <animation>
              <punkt x="5" y="34"/>
              <punkt x="14" y="34"/>
          </animation>
          <verbindungen>
          </verbindungen>
      </abschnitt> 
      <abschnitt>
          <animation>
              <punkt x="14" y="24"/>
              <punkt x="14" y="34"/>
          </animation>
          <verbindungen>
              <verbindung n="1" k="2"/>
          </verbindungen>
      </abschnitt> 
      <abschnitt>
          <animation>
              <punkt x="20" y="30"/>
              <punkt x="14" y="34"/>
          </animation>
          <verbindungen>
              <verbindung n="1" k="2"/>
          </verbindungen>
      </abschnitt>

Also die Punkte bewegen sich auf einer Geraden von den x,y Koordinaten des einen Abschnitts zum nächsten Abschnitt. Wenn da eine Verbindung besteht dann soll da ne Linie rein. Hoffe es ist jetzt klarer :)

MfG Mahzuni
 
Zuletzt bearbeitet von einem Moderator:
Hi,

ich bin jetzt mal davon ausgegangen, dass in jedem Abschnitt die selben Clips (bzw. die selbe Anzahl) beteiligt ist - ansonsten müsste man das ganze anders aufziehen. ;)

Für jeden Punkt wird ein MovieClip erstellt, dem ein Array für die einzelnen Abschnitte übergeben wird. Jedes Element dieses Array ist wiederum ein Objekt, dass die Abschnittskoordinaten und ggf. das Ziel einer Verbindung enthält. Ein Prototype sorgt dann für die Animation der einzelnen MCs und das Zeichnen der Verbindungslinien (siehe Anhang).

Gruß
.
 

Anhänge

  • abschnitt.zip
    8,9 KB · Aufrufe: 37
ne oder? hallo? du hast mir ja fast schon die ganze Arbeit abgenommen :)

vielen vielen Dank für deine Mühen, werd jetzt erstmal versuchen den Code zu verstehen.
Ist das eigentlich gewollt dass die etwas unsychron laufen?

Ok habs mir gerade angeschaut.. ich hätte da einige Fragen bzgl irgendwelche Befehle
z.B. (.nextSibling) aber bevor ich hier anfange dich damit zu stressen :) wollt ich doch lieber mal fragen ob es eine Bibliothek mit den Befehlen hat wo man schauen kann :)

MfG Mahzuni
 
Hi,

schau Dir einfach mal die Referenz an (F1), in diesem Fall am besten zuerst die zur XML-Klasse. Du findest alle Methoden und Eigenschaften recht anschaulich erklärt.

Dass die Dinger asynchron laufen, ist ein nicht unbedingt gewollter Nebeneffekt, der daraus resultiert, dass unterschiedlich lange Strecken unterschiedlich viel Zeit brauchen. Man kann das ganze mit ein wenig Aufwand durchaus synchronisieren (zumindest in dem Maße, dass "fertige" Objekte warten, biss alle Geschwister ihren Weg ebenfalls beendet haben), und ich helfe Dir dabei auch gerne weiter - ab morgen bin ich allerdings erstmal 10 Tage unterwegs, darum wirst Du Dich noch ein wenig gedulden müssen.

Gruß
.
 

Neue Beiträge

Zurück