Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-02-2005, 18:57   #1 (permalink)
WindelWinny
 
Registriert seit: Feb 2005
Beiträge: 7
Punkte mit Linienanimation verbinden

Hi,
wie ihr unten am AS sehen könnt, bin ich kein Profiscripter, nennt mich also eher Newbie.

Ich habe ein Problem, bei dem ich langsam nicht mehr weiter weiß.
Ich möchte eine Animation erstellen, bei der eine bestimmte Anzahl an Punkten
durch eine Linie verbunden wird, allerdings als Animation.
D.h.
Eine Linie soll langsam von Punkt A nach B laufen, dann von B nach C usw.
Dabei soll immer die gleiche Geschwindigkeit eingehalten werden.

Wie mache ich das am besten?

Jeden Punkt habe ich in ein Array geschrieben
Punkt1(x-wert, y-wert)
Punkt2(x-wert, y-wert)
usw.
dann versuche ich mit der lineTo Funktion in genormten Abständen zu zeichnen,
immer Stückchen für Stückchen.

Wittlerweile bezweifle ich, dass das überhaupt so geht.

Ich habe ja schon das Problem, dynamisch an die Werte des Arrays zu kommen.
siehe AS delta_x und _y. Das geht da gar nicht.


Wäre echt nett wenn mir jemand weiterhelfen könnte

Gruß
Braunbär

Code:
anzahlP = 15;
// Es gibt 15 Punkte
Punkt1 = new Array(180,450);
Punkt2 = new Array(120,450);
Punkt3 = new Array(200,350);
Punkt4 = new Array(120,350);
Punkt5 = new Array(120,300);
Punkt6 = new Array(210,300);
Punkt7 = new Array(250,200);
Punkt8 = new Array(120,200);
Punkt9 = new Array(120,150);
Punkt10 = new Array(300,150);
Punkt11 = new Array(240,300);
Punkt12 = new Array(300,300);
Punkt13 = new Array(300,350);
Punkt14 = new Array(220,350);
Punkt15 = new Array(180,450);


function paint_it(){
_root.createEmptyMovieClip( "versuch", 1 );
	with (_root.versuch){
		lineStyle (5, 0x000000, 100);
		//Anfangspunkt setzten
		moveTo (Punkt1[0],Punkt1[1]);
		//für jeden Punkt durchlaufen
		 for(j=1;j<anzahlP+2;j++){
			 // das delta x der 2 Punkte berechnen
			 //für den ersten Schleifendurchgang sollte das lauten
			 // delta_x = Punkt2[0]-Punkt1[0];
			delta_x = (this["Punkt"+(j+1)]+"[0]")-(this["Punkt"+j]+"[0]");
				trace (delta_x);
			 // das delta y der 2 Punkte berechnen
			 //für den ersten Schleifendurchgang sollte das lauten
			 // delta_y = Punkt2[1]-Punkt1[1];
			delta_y = (this["Punkt"+(j+1)]+"[0]")-(this["Punkt"+j]+"[0]");
				trace (delta_y);
			//die Länge der Verbindungslinie wird berechnet
			laenge = Math.round (Math.sqrt(delta_x*delta_x+delta_y*delta_y));
			//damit die Linien-Animation immer gleichschnell läuft, wird
			//hier die Schrittlänge im Bezug zur Linienlänge berechnet
			dx = delta_x/laenge;
			dy = delta_y/laenge;
			//hier bin ich noch nicht fertig
			//das soll natürlich auch dynamisch laufen
			for (i=0;i<laenge; i++){
				Punkt1[0] = Punkt1[0]+ dx;
				Punkt1[1] = Punkt1[1]+ dy;
				lineTo (Punkt1[0], Punkt1[1]);
				//hier müßte eine kleine Zeitverzögerung eingebaut werden
				
			}
		}
		
	}
}
paint_it();
coyote-b ist offline   Mit Zitat antworten
Alt 09-02-2005, 00:35   #2 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
ahja, eine «sieben».

habe dir mal was gebastelt.
ist noch nicht perfekt, da z.b. das zeichnen in abschnitten
noch nicht funktioniert (habe es jetzt so schnell nicht hin-
bekommen), aber vielleicht bringt es dich ja trotzdem
weiter ...

wenn du fragen hast, dann frage.

gruß, gaspode
Angehängte Dateien
Dateityp: zip punkte.zip (4,4 KB, 73x aufgerufen)
gaspode ist offline   Mit Zitat antworten
Alt 19-02-2005, 16:41   #3 (permalink)
WindelWinny
 
Registriert seit: Feb 2005
Beiträge: 7
Thumbs up

danke für Deine Antwort.
Mit einem 2-dim. Array ist das natürlich auch gleich "professioneller".

Aber wie kann ich da jetzt eine Zeitverzögerung einbauen? Die Zahl soll ja langsam entstehen.
Geht das überhaupt mit reinem AS, habe leider bisher noch nichts in der Doku gefunden? Kann man da nicht irgendwie einen Timestamp nehmen und damit Rechnen?

coyote-b ist offline   Mit Zitat antworten
Alt 19-02-2005, 17:17   #4 (permalink)
_______________
 
Benutzerbild von son yu
 
Registriert seit: Mar 2003
Ort: !Schnitzerland
Beiträge: 2.003
Zitat:
Zitat von coyote-b
[…]Aber wie kann ich da jetzt eine Zeitverzögerung einbauen? Die Zahl soll ja langsam entstehen.
Geht das überhaupt mit reinem AS, habe leider bisher noch nichts in der Doku gefunden? Kann man da nicht irgendwie einen Timestamp nehmen und damit Rechnen?

such mal in der Hilfe nach setIntervall...

schoene gruesse
__________________
ey… be cool!

Mac OS-X 10.5.6, Safari Version 4 Public Beta (5528.16), on PowerBook 12" G4 1,5 GHz,
1,25 GB RAM, FlashPlayer 9 is auch noch da, wenn ich Lust habe…
son yu ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele