Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-07-2004, 20:29   #1 (permalink)
this.onEnterFame
 
Benutzerbild von RedSaint
 
Registriert seit: Feb 2002
Ort: Jetzte: Stuttgart
Beiträge: 1.666
Tiefergehender Ansatz gesucht: Wellenlinie(n)

hi leude,

ich hab eine intro idee von ner verzweifelten freundin bekommen ... klar kann ich helfen und nu??? - aber code mäßig hab ich kaum nen wirklichen ansatz ...

-> es geht darum dass mehrere wellen linien von oben und unten in einander laufen

-> jede wellenlinie hat dabei eine eigene "wellen bewegung"

-> das war´s ansich ...


für mich ist "wellenbewegung " == sinus & cosinus, und da das ganze durch ne linie dargestellt wird, kann man evtl. was mit lineTo bzw curveTo machen ... aber da hörts dann bei mir auch schon auf ... leider

und wenn ich am ende 10 wellen unten und 10 wellen oben hab .. wie mach ich das performant????

jemand nen ansatz? oder ne idee? oder nen begriff zum nachschlagen im AS handbuch? oder ...



danke

_RED_
__________________
_may the force be with you_
.................................................. .........
on Fire 2008
.................................................. .........

Easy Crime available here
.................................................. .........

_RED_ + Flashforum = Big Love
.................................................. .........

A.K.A: ACHIM 0815
RedSaint ist offline   Mit Zitat antworten
Alt 20-07-2004, 20:53   #2 (permalink)
buehnentechniker
 
Benutzerbild von honifred
 
Registriert seit: Feb 2002
Ort: trier
Beiträge: 2.448
hi red, alter achim!

hier hätte ich vielleicht einen ansatz. habe den hier tief in meinem flashordner gefunden. kannst de mal anschauen
ActionScript:
  1. var t=0;
  2. var z;
  3. onEnterFrame=function(){
  4.         clear();
  5.         t+=0.1;
  6.         z=Math.sin(t)*100;
  7.         lineStyle(1,0x000000,100);
  8.         beginFill(0xffff11,100);
  9.         moveTo(100,100);
  10.         lineTo(100,200);
  11.         curveTo(200,z+200,300,200);
  12.         curveTo(400,-z+200,500,200);
  13.         lineTo(500,100);
  14.         lineTo(100,100);
  15.         endFill();
  16. }
  17. stop();
__________________
Es gibt eine Sache, die schlimmer ist, als die Ausschweifung: die Abstinenz.

Achim 69
honifred ist offline   Mit Zitat antworten
Alt 20-07-2004, 22:28   #3 (permalink)
this.onEnterFame
 
Benutzerbild von RedSaint
 
Registriert seit: Feb 2002
Ort: Jetzte: Stuttgart
Beiträge: 1.666
warum "wackelt" das so wenn ich das nun so umcode:

PHP-Code:
var t=0
var 
z
this.onEnterFrame=function(){ 
        
clear(); 
        
m=random(100)+100
        t
+=0.1
        
z=Math.sin(t)*m
        
lineStyle(1,0x000000,100); 
        
moveTo(100,200); 
        
curveTo(200,z+200,300,200); 
        
curveTo(400,-z+200,500,200); 

stop(); 
denn ich will ja hinterher wellenlinen haben die uterschiedlich fließen ...

-> und ne kurze erkläre zu dem z=Math.sin(t)*m; wäre echt lasse ... weil raffen tu ich da nichts... hab mir auch nochmal smirgels sinusquatsch angeschaut... aber wirklich peilen tu ich dat nicht ... nur sehn wa passiert... aber geklick hat´s noch nicht

_RED_
__________________
_may the force be with you_
.................................................. .........
on Fire 2008
.................................................. .........

Easy Crime available here
.................................................. .........

_RED_ + Flashforum = Big Love
.................................................. .........

A.K.A: ACHIM 0815

Geändert von RedSaint (20-07-2004 um 22:29 Uhr)
RedSaint ist offline   Mit Zitat antworten
Alt 21-07-2004, 09:14   #4 (permalink)
_Thomas_
Gast
 
Beiträge: n/a
hallo

du suchst nicht zufällig den ozean?

ActionScript:
  1. createEmptyMovieClip("ocean", 10);
  2. ptList=new Array(), ptList2=new Array();
  3. anzahl = 12;
  4. breite = Stage.width/anzahl*(anzahl+6);
  5. for (var i = 0; i<anzahl; i++) {
  6.     x = ((breite/(anzahl-1))*i);
  7.     ptList[i] = {n:0, dz:i%2 ? (-(random(100))) : (random(100)), amp:(1+Math.random())/10, x:x, y:100};
  8.     ptList2[i] = {x:0, y:0};
  9. }
  10. ocean.onEnterFrame = function() {
  11.     for (var i = 0; i<anzahl; i++) {
  12.         ptList[i].x -= 3;
  13.         if (ptList[i].x<-Stage.width/anzahl*3) {
  14.             ptList[i].x = breite;
  15.             ptList.push(ptList.shift());
  16.         }
  17.         ptList[i].n += ptList[i].amp;
  18.         ptList[i].y = Math.sin(ptList[i].n)*ptList[i].dz+100;
  19.         ptList2[i].x = (ptList[i].x+ptList[i+1].x)/2;
  20.         ptList2[i].y = (ptList[i].y+ptList[i+1].y)/2;
  21.     }
  22.     with (this) {
  23.         clear();
  24.         lineStyle(3, 0x0099cc);
  25.         beginFill(0x0099cc);
  26.         moveTo(0, Stage.height);
  27.         lineTo(ptList[0].x, ptList[0].y);
  28.         for (var i = 1; i<(anzahl-2); i++) {
  29.             curveTo(ptList[i].x, ptList[i].y, ptList2[i].x, ptList2[i].y);
  30.         }
  31.         curveTo(ptList[i].x, ptList[i].y, ptList[i+1].x, ptList[i+1].y);
  32.         lineTo(ptList[i+1].x, Stage.height);
  33.         endFill();
  34.     }
  35. };

hier bekommt jeder kurvenabschnitt eine eigene amplitude, innerhalb derer die kurve schwingt. dabei werden einstiegs und ankerpunkte auf der x-achse horizontal 'durchgescrollt' und bei unterschreiten eines bestimmten wertes einfach wieder an das ende der punktliste gesetzt.

anbei auch nochmal als zip zum kucken.

Gruß & Kuss,
Tante Amanda
Angehängte Dateien
Dateityp: zip ocean.zip (3,0 KB, 229x aufgerufen)
  Mit Zitat antworten
Alt 21-07-2004, 17:08   #5 (permalink)
this.onEnterFame
 
Benutzerbild von RedSaint
 
Registriert seit: Feb 2002
Ort: Jetzte: Stuttgart
Beiträge: 1.666
jaaaaaaaaaaaaaaa - genial ... ich denk damit komm ich auf jeden fall zu meinem ansatz zum weiterbasteln !


nur hab ich dass problem dass ich wieder nur seh was passiert - aber die code zeilen im detail nicht peile ... haste evtl. 5 minuten um mir das script zu kommentieren? wäre genial






grüße

_RED_
__________________
_may the force be with you_
.................................................. .........
on Fire 2008
.................................................. .........

Easy Crime available here
.................................................. .........

_RED_ + Flashforum = Big Love
.................................................. .........

A.K.A: ACHIM 0815
RedSaint ist offline   Mit Zitat antworten
Alt 21-07-2004, 17:27   #6 (permalink)
_Thomas_
Gast
 
Beiträge: n/a
hi RedSaint.

klar, mach ich heute abend oder spätestens morgen..
leichter wird es aber trotzdem sein, wenn du mir vorab ein paar sachen aufschreibst, die du partout nicht verstehst. weil, dann weiß ich, daß du dich schonmal ein wenig mit dem script bschäftigt hast und muß mir nicht für alles kommentare aus den fingern saugen...bin nämlich verhältnismäßig kommentierfaul, weisst du?

gruß,
Tante Amanda
  Mit Zitat antworten
Alt 21-07-2004, 18:20   #7 (permalink)
this.onEnterFame
 
Benutzerbild von RedSaint
 
Registriert seit: Feb 2002
Ort: Jetzte: Stuttgart
Beiträge: 1.666
super genial tante amanda!!!

machen wir doch so... ich kommentier mal selbst wo ich´s kann:

PHP-Code:
createEmptyMovieClip("ocean"10);  // mache neuen Mc, name: ocean, tiefe 10
ptList=new Array(), ptList2=new Array(); // 2 neue arrays anlegen
anzahl 12// variable anzahl ist auf wert 12
breite Stage.width/anzahl*(anzahl+6); //var breite is bühnenbreite durch var anzahl mal anzahl+6 --->warum?
for (var 0i<anzahli++) {  // solange var i kleiner als var anzahl, zähl mir i hoch
    
= ((breite/(anzahl-1))*i); // var x gleich breite durch (anzahl -1) mal i
    
ptList[i] = {n:0dz:i%? (-(random(100))) : (random(100)), amp:(1+Math.random())/10x:xy:100}; // ???
    
ptList2[i] = {x:0y:0}; // zweiter array stelle i =_y und _x pos 0
// evtl. kurz: was MACHT diese schleife?
ocean.onEnterFrame = function() { // der leere MC OEF
    
for (var 0i<anzahli++) { // wieder die for schleife
        
ptList[i].-= 3// ??
        
if (ptList[i].x<-Stage.width/anzahl*3) { //??
            
ptList[i].breite// ??
            
ptList.push(ptList.shift());// ?? 
        

        
ptList[i].+= ptList[i].amp// ??
        
ptList[i].Math.sin(ptList[i].n)*ptList[i].dz+100// ??
        
ptList2[i].= (ptList[i].x+ptList[i+1].x)/2// ??
        
ptList2[i].= (ptList[i].y+ptList[i+1].y)/2// ??
    

    
with (this) {  // mit dem ocean MC tue ausserdem folgendes
        
clear(); // ??
        
lineStyle(30x0099cc); // lienen art
        
beginFill(0x0099cc);  // fang an zu füllen
        
moveTo(0Stage.height); // beweg ihn zu...
        
lineTo(ptList[0].xptList[0].y); // line machen zu ...
        
for (var 1i<(anzahl-2); i++) {  // ??
            
curveTo(ptList[i].xptList[i].yptList2[i].xptList2[i].y); // ??
        

        
curveTo(ptList[i].xptList[i].yptList[i+1].xptList[i+1].y); // ??
        
lineTo(ptList[i+1].xStage.height); // linie machen zu ...
        
endFill(); // ende der füllung
    

}; 
ansich brauch ich die füllung und dass sich das ganze gebilde bewegt auch garnicht ... nur die wellenlinie und wellenbewegung - aber ich wart mal auf deinen post evtl wird´s dann alles nochmal a bisserl klarer ...


danke und cu

_RED_
__________________
_may the force be with you_
.................................................. .........
on Fire 2008
.................................................. .........

Easy Crime available here
.................................................. .........

_RED_ + Flashforum = Big Love
.................................................. .........

A.K.A: ACHIM 0815

Geändert von RedSaint (21-07-2004 um 18:23 Uhr)
RedSaint ist offline   Mit Zitat antworten
Alt 21-07-2004, 22:54   #8 (permalink)
_Thomas_
Gast
 
Beiträge: n/a
hallo hi hi..

sooo...eigentlich, wie sollte es anders sein, ist das alles gar nicht so schwierig..

ActionScript:
  1. createEmptyMovieClip("ocean", 10)// mache neuen Mc, name: ocean, tiefe 10
  2. ptList=new Array(), ptList2=new Array(); // 2 neue arrays anlegen
  3. anzahl = 12; // variable anzahl ist auf wert 12
  4. breite = Stage.width/anzahl*(anzahl+6); //var breite is bühnenbreite durch var anzahl mal anzahl+6 --->warum?
  5.  

anzahl+6 wird hier als faktor für den bruchteil der breite der stage heran gezogen. das ist das 'sicherheitspolster', damit die kurvensegmente nur ausserhalb der sichtbaren bereiche links abgeschnitten und rechts wieder drangesetzt werden.

ActionScript:
  1. for (var i = 0; i<anzahl; i++) {  // solange var i kleiner als var anzahl, zähl mir i hoch
  2.     x = ((breite/(anzahl-1))*i); // var x gleich breite durch (anzahl -1) mal i
  3.     ptList[i] = {n:0, dz:i%2 ? (-(random(100))) : (random(100)), amp:(1+Math.random())/10, x:x, y:100}; // ???
  4.     ptList2[i] = {x:0, y:0}; // zweiter array stelle i =_y und _x pos 0
  5. } // evtl. kurz: was MACHT diese schleife?
  6.  

diese schleife füllt die im ersten scriptteil deklarierten arrays mit objekten, die wiederum variablen zur beschreibung meiner punkte enthalten, sowie werte für die randomisierte sinusschwingung.

pList enthält also nach der schleife 12 objekte, die wiederum folgende vars enthalten:

n = zählervariable
dz = differenz, auf deren basis die y-koordinate der vertexpunkte später schwingt. hier wird entweder ein wert von 0 bis -99 oder von 0 bis +99 zurückgegeben, je nachdem, ob i (also die zählervariable der schleife) grade oder ungrade ist - also im wechsel.
amp = amplitude, randomisierter wert für die intensität der schwingung
x = x-koordinate des vertexpunktes des kurvensegments
y = y-koordinate des vertexpunktes des kurvensegments

pList2 wird mit 12 objekten gefüllt á

x = x-koordinate des ankerpunktes des kurvensegments
y = y-koordinate des ankerpunktes des kurvensegments

wobei die werte der ankerpunkte erst später unter einbeziehen der vertexpunkte berechnet werden.

ActionScript:
  1. ocean.onEnterFrame = function() { // der leere MC OEF
  2.     for (var i = 0; i<anzahl; i++) { // wieder die for schleife
  3.         ptList[i].x -= 3; // ??
  4.         if (ptList[i].x<-Stage.width/anzahl*3) { //??
  5.             ptList[i].x = breite; // ??
  6.             ptList.push(ptList.shift());// ??
  7.         }

die x-koordinate eines jeden vertexpunktes im bezeichneten array wird pro onEnterFrame-aufruf um 3 px nach links bewegt. ist die x-koordinate eines vertexpunktes dabei kleiner als das bereits erwähnte 'sicherheitspolster' im negativen bereich, wird dem vertexpunkt als x-koordinate wieder die breite zugewiesen. als folge switched dieser punkt von links außerhalb des sichtbaren bereichs nach ganz rechts außerhalb des sichtbaren bereichs - eigentlich ein ähnliches prinzip wie die frühen horizontalen scrollmenus à la yugop. zum schluß wird noch innerhalb des arrays das gleiche getan, was mit der x-koordinate des vertexpunktes auch gemacht wurde: vom ersten index auf den letzten.


ActionScript:
  1. ptList[i].n += ptList[i].amp; // ??
  2.         ptList[i].y = Math.sin(ptList[i].n)*ptList[i].dz+100; // ??
  3.         ptList2[i].x = (ptList[i].x+ptList[i+1].x)/2; // ??
  4.         ptList2[i].y = (ptList[i].y+ptList[i+1].y)/2; // ??
  5.     }

hier geht die schwingung von statten. wie gesagt, bringt jeder punkt seine eigenen schwingungswerte mit. die mit der amplitude heraufgezählte variable n schwingt mittels sinus im bereich, den der differenzwert dz vorgibt. 100 wird hinzuaddiert, weil das die anfangs y-koordinate des vertexpunktes war. in den letzten zeilen werden die ankerpunkte berechnet, die sich jeweils aus dem mittleren abstand des in der schleife momentan aktuellen und des jeweils nächsten vertexpunktes ergeben.


ActionScript:
  1. with (this) {  // mit dem ocean MC tue ausserdem folgendes
  2.         clear(); // ??
  3.         lineStyle(3, 0x0099cc); // lienen art
  4.         //beginFill(0x0099cc);  // fang an zu füllen
  5.         //moveTo(0, Stage.height); // beweg ihn zu...
  6.         //lineTo(ptList[0].x, ptList[0].y); // line machen zu ...
  7.         moveTo(ptList[0].x, ptList[0].y);       
  8.         for (var i = 1; i<(anzahl-2); i++) {  // ??
  9.             curveTo(ptList[i].x, ptList[i].y, ptList2[i].x, ptList2[i].y); // ??
  10.         }
  11.         curveTo(ptList[i].x, ptList[i].y, ptList[i+1].x, ptList[i+1].y); // ??
  12.         //lineTo(ptList[i+1].x, Stage.height); // linie machen zu ...
  13.         //endFill(); // ende der füllung
  14.     }
  15. };

clear löscht alles, was zuvor in einen movieclip gezeichnet wurde.
ich habe mal alles auskommentiert, was du nicht mehr brauchst, wenn es dir ohnehin nur auf die linie ankommt. in der schleife werden die zuvor entstandenen werte nun in kurvensegmenten aneinandergereiht.

puh..

so.

fertig.

fragen?

ich hoffe nicht

zum besseren verständnis, schraub einfach mal ein wenig an den werten rum und sieh was passiert. das hat mir zumindest schon beim verständnis vieler scripten geholfen.

gruß,
Tante Amanda
  Mit Zitat antworten
Alt 13-03-2006, 09:18   #9 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 2
wellenreiter

Hallo zusammen,
cooles script ! Beim programmieren einer webseite benötige ich genau so ein script. habe das script auch schon eingebaut und konnte es auch nach meinen bedürfniss modifizieren. jetzt habe ich folgendes problem: mein chef möchte, das verschiedene menüpunkte auf der welle reiten! der punkt sollte immer an der selben _x position stehen und mit der welle auf und ab "schwimmen". jetzt habe ich das problem, das ich aus der kurve an einer position x den entsprechenden y position errechnen muß!!!! wie mache ich das am besten???.
schon mal vielen dank
heiko
Heiko74 ist offline   Mit Zitat antworten
Alt 13-03-2006, 17:24   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..wie mache ich das am besten?.."
kündigen!

die kurven sind quadratische bezier-kurven und da kann man nicht einfach aus x einen y wert berechnen.
http://www.seibsprogrammladen.de/fra...ispiele/flash7
-> Zeichnen

"..auf der welle reiten!.."
oder
versuch halt das selbe mit sin/cos überlagerungen und nur mit lineTo zeichnen

oder näherungsweisse
zwichen zwei endpunkten der curveTo linear vermitteln.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 28-03-2006, 21:09   #11 (permalink)
Neuer User
 
Benutzerbild von vauess
 
Registriert seit: Nov 2004
Beiträge: 52
hello
ich habe eine Frage zu diesem wundervollen Ozean aus post #4

und zwar hätte ich gerne zuerst eine ruhige Wasseroberfläche, die dann allmählich anfängt Wellen zu schlagen.

leider bin ich AS-Anfänger, aber es müsste doch so gehen, dass ich in Zeile 7 statt der 100 die für die Wellenhöhe zuständig ist eine Variable (b) setze, die zuerst 0 ist und dann bis auf 100 raufzähle.

PHP-Code:
for (var 0b<100b++) 
aber wo setzte ich das ein und verbinde es mit zeile 7 in die ich die Variable b eingesetzt habe

PHP-Code:
ptList[i] = {n:0dz:i%? (-(random(b))) : (random(b)), amp:(1+Math.random())/10x:xy:100}; 
kann mir jemand hier weiterhelfen ?
danke !
vauess 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 10:39 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele