Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-10-2003, 19:04   #1 (permalink)
Wir werden sehn ...
 
Benutzerbild von shalf
 
Registriert seit: Jul 2002
Ort: Hard
Beiträge: 142
Bewegung durch As

Hy alle zusammen.

Ich weiß, die meisten Antworten findet man hier bei "suchen und finden", aber die Lösungen sind für einen Anfänger für mich einfach zu kompliziert. Vor allem wird nie etwas erklärt.

Darum bitte ich wenn möglich um eine halbwegs gute erklärung, wie ich ein ball von Punkt a nach Punkt b durch as bewegen kann.

Thx Shalf
__________________
Auf dem Weg zum Erfolg, gibt es keine Abkürzung.
shalf ist offline   Mit Zitat antworten
Alt 01-10-2003, 19:23   #2 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Ort: Bayern
Beiträge: 120
Bin selbst noch nicht so Scriptsicher aber hier ein ansatz:

mc_ball.onEnterFrame = function (){
if(this._x y<= Bereich wo er stoppen soll){
this._x += 5; (oder ein anderer Wert)
}else{
this._x += 0;
delete(onEnterFrame);
}
__________________
Danke an alle Beteiligten ...

Geändert von drive68 (01-10-2003 um 19:24 Uhr)
drive68 ist offline   Mit Zitat antworten
Alt 01-10-2003, 19:44   #3 (permalink)
ActionScripter
 
Benutzerbild von leroy
 
Registriert seit: Jun 2003
Ort: Paderborn
Beiträge: 140
Nachhilfe Mathe...

Das ist doch im Prinzip ein mathematisches Problem.

Du hast einen Punkt(x1,y1) und willst innerhalb einer Zeit t zum Punkt (x2,y2).

In Flash hast zu eine Framerate von f Sekunden. Daraus folgt, dass du t/f Frames(=Schritte) benötigst.

Daraus ergibt sich, ein Einzelschritt in x- bzw. y-Richtung von:
dx = (Differenz in x-Achse)/Anzahl Schritte = (x2-x1)/(t/f) = f*(x2-x1)/t
und analog:
dy = f*(y2-y1)/t

Und nun die Umsetzung in Flash:
Angenommen, dein MC heisst walker.
ActionScript:
  1. walker.time = 0;
  2. walker.dx = dx;
  3. walker.dy = dy;
  4. walker.schritte = f/t;
  5. walker.onEnterFrame = function() {
  6.   if (this.time < this.schritte) {
  7.     this._x += this.dx;
  8.     this._y += this.dy;
  9.     this.time++;
  10.   }
  11. }

Grüße,
Markus

Geändert von leroy (01-10-2003 um 20:23 Uhr)
leroy ist offline   Mit Zitat antworten
Alt 01-10-2003, 19:56   #4 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Talking

Grüß Gott zusammen,
Jetzt nochmal a bissl sauberer, damit sich da nicht gleich Fehler einschleichen tun:
ActionScript:
  1. this.mc_ball.onEnterFrame = function() {
  2.     if (this._x<=300) { //Kommentare besser so schreiben, dann kann man's hier gleich rauskopieren...
  3.         this._x += 5;
  4.     } else {
  5.         delete this.onEnterFrame; //x += 0 brauch ma eigentlich nicht
  6.     }
  7. }; //die letzte Klammer hat bei dir auch gefehlt
  8.  

Gruß,
Tom

ups, hatte leroys Beitrag noch nicht gesehen. Meiner bezieht sich natürlich auf den vorhergehenden...
@leroy: und wenn die beiden Kollegen, die sich ja als relative AS-Neulinge bezeichnen, das kapieren, was du geschrieben hast, fress ich meinen Moock (is nicht bös gemeint!)
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)

Geändert von sonar (01-10-2003 um 20:11 Uhr)
sonar ist offline   Mit Zitat antworten
Alt 01-10-2003, 20:23   #5 (permalink)
ActionScripter
 
Benutzerbild von leroy
 
Registriert seit: Jun 2003
Ort: Paderborn
Beiträge: 140
Zitat:
Geschrieben von sonar

@leroy: und wenn die beiden Kollegen, die sich ja als relative AS-Neulinge bezeichnen, das kapieren, was du geschrieben hast, fress ich meinen Moock (is nicht bös gemeint!)

Das liegt dann aber nicht an meinem AS, sondern an den mathematischen Grundlagen.

Gruß,
Markus
leroy ist offline   Mit Zitat antworten
Alt 01-10-2003, 20:28   #6 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
Die gängigste Methode von AS "moves" ist wohl:
ActionScript:
  1. this.endx = 350;
  2. this.endy = 450;
  3. this.speed = 5;
  4.  
  5. deinmc.onEnterFrame = function(){
  6. this._x += (this.endx - this._x) / this.speed ;
  7. this._y += (this.endy - this._y) / this.speed ;
  8. if( Math.abs(this._x - this.endx) < 0.3 &&  Math.abs(this._y - this.endy) < 0.3 ) delete this.onEnterFrame ; //ist für das Funktionieren nicht notwendig
  9. }

mfg geo
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker
_geo_ ist offline   Mit Zitat antworten
Alt 01-10-2003, 20:53   #7 (permalink)
Wir werden sehn ...
 
Benutzerbild von shalf
 
Registriert seit: Jul 2002
Ort: Hard
Beiträge: 142
Erstmals danke für eure zahlreichen Beiträge.

Nur leider funzts immer noch net. Muss ich die as auf den mc legen oder auf das frame? Brauch ich da onClipEvent (load) oder onClipEvent (enterFrame) oder was auch immer?

Das von _geo_ schaut schon mal nicht schlecht aus aber kapieren tu ichs trotzdem net. Wie schon gesagt, as ist absolutes neuland für mich. Kenn zwar ein bischen die grundlagen aber naja...
wär für eine erklärung sehr sehr dankbar.

Shalf
__________________
Auf dem Weg zum Erfolg, gibt es keine Abkürzung.
shalf ist offline   Mit Zitat antworten
Alt 01-10-2003, 21:00   #8 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
ganz einfach du hast ein mc daas auf der pso 0 0 steht x=0 y=0 und du willst es auf 100 100 bringen dann rechnest du mal den koordinaten unterschied aus this.endx - this._x dann weisst du,dass es 100 "pixel" sind die dir fehlen. Diese Entfernung dividierst du nun durch deinen Faktor (speed) zb 100/10 [(this.endx - this._x)/speed] dann erhälts du 10 und die zählst du zu der momentanen position dazu ( this._x += (this.endx - this._x) / this.speed; ) => dein mc ist von 0 0 auf 10 10 gerutscht und dann fängt es wieder von vorne an 90/10 = 9 => this._ += 9 (genauso bei y) dann ist dein mc auf 19 19 usw. ...

mfg geo

einfach Testen mit:

ActionScript:
  1. this.endx = 100;
  2. this.endy = 100;
  3. this.speed = 10;
  4.  
  5. deinmc._x = deinmc._y = 0;
  6.  
  7. deinmc.onEnterFrame = function(){
  8.         this._x += (this.endx - this._x) / this.speed ;
  9.         this._y += (this.endy - this._y) / this.speed ;
  10. trace(this._x +" | " + this._y);
  11.         if( Math.abs(this._x - this.endx) < 0.3 &&  Math.abs(this._y - this.endy) < 0.3 ) delete this.onEnterFrame ; //ist für das Funktionieren nicht notwendig
  12. }
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (01-10-2003 um 21:03 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 01-10-2003, 21:12   #9 (permalink)
Wir werden sehn ...
 
Benutzerbild von shalf
 
Registriert seit: Jul 2002
Ort: Hard
Beiträge: 142
Ok jetzt bewegt es sich mal. Aber wenn ich jetzt will dass er von punkt a nach punkt b wandert stimmt dass dann so:

ActionScript:
  1. onClipEvent (enterFrame) {
  2. this.endx = 100;
  3. this.speed = 10;
  4.  
  5. _root.ball._x = 0;
  6.  
  7. _root.ball.onEnterFrame = function(){
  8.         this._x += (this.endx - this._x) / this.speed ;
  9.         if( Math.abs(this._x - this.endx) < 0.3 ) delete this.onEnterFrame ; //ist für das Funktionieren nicht notwendig
  10. }
  11. }
__________________
Auf dem Weg zum Erfolg, gibt es keine Abkürzung.
shalf ist offline   Mit Zitat antworten
Alt 01-10-2003, 22:17   #10 (permalink)
ActionScripter
 
Benutzerbild von leroy
 
Registriert seit: Jun 2003
Ort: Paderborn
Beiträge: 140
Zitat:
Geschrieben von shalf
ActionScript:
  1. onClipEvent (enterFrame) {
  2. this.endx = 100;
  3. this.speed = 10;
  4.  
  5. _root.ball._x = 0;
  6.  
  7. _root.ball.onEnterFrame = function(){
  8.         this._x += (this.endx - this._x) / this.speed ;
  9.         if( Math.abs(this._x - this.endx) < 0.3 ) delete this.onEnterFrame ; //ist für das Funktionieren nicht notwendig
  10. }
  11. }
So funktioniert das Skript nicht, denn du initialisierst es ständig. Du musst den Rumpf von onClipEvent (enterFrame) auf eine Ebene legen.

Im übrigen wäre es besser, wenn du konkrete Fragen stellst. Wie soll man vernünftig antworten können, wenn du schreibst, dass du irgendetwas nicht verstehst?

Grüße,
Markus
leroy ist offline   Mit Zitat antworten
Alt 02-10-2003, 16:52   #11 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
wenn du es in FLash 5 Syntax schreiben willst dann solltest du es so machen:
ActionScript:
  1. onClipEvent(load){
  2. this.swapDepths(10);
  3. this._x = this._y = 0;
  4. this.endx = 100;
  5. this.endy = 100;
  6. this.speed = 10;
  7. }
  8.  
  9. onClipEvent(enterFrame){
  10.         this._x += (this.endx - this._x) / this.speed ;
  11.         this._y += (this.endy - this._y) / this.speed ;
  12.         trace(this._x +" | " + this._y);
  13. }
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker
_geo_ ist offline   Mit Zitat antworten
Alt 02-10-2003, 17:40   #12 (permalink)
gbd
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 103
was müsste ich machen um mit einem button dem movieclip
zu sagen wo er hin muss.

_root.deinmc.this.endx 100
oder sowas ?!

bidde um hilfe
gbd
gbd ist offline   Mit Zitat antworten
Alt 02-10-2003, 20:17   #13 (permalink)
gbd
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 103
hmm

keiner ne ahnung?
gbd ist offline   Mit Zitat antworten
Alt 02-10-2003, 20:25   #14 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
geo hatts dir doch vorgemacht ....weshalb nimmst du sein code ned ?
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 02-10-2003, 20:28   #15 (permalink)
ActionScripter
 
Benutzerbild von leroy
 
Registriert seit: Jun 2003
Ort: Paderborn
Beiträge: 140
Zitat:
Geschrieben von gbd
was müsste ich machen um mit einem button dem movieclip
zu sagen wo er hin muss.

_root.deinmc.this.endx 100
oder sowas ?!

bidde um hilfe
gbd
Lass das .this weg. Dann passt es. This bezeichnet das aktuelle Objekt.

Beispiel:
Wenn das Objekt deinmc eine Variable endx hat, dann spricht man diese von außen mit:
deinmc.endx an.
In einer on (enterFrame) Funktion befindet man sich jedoch nicht außerhalb des Objekts, sondern innerhalb. Man ist in einer zum Objekt gehörenden Funktion. Daher spricht man die Variable mit this.endx an.

Ich hoffe, das war verständlich genug.

Grüße,
Markus
leroy 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 20:09 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele