Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-02-2004, 15:40   #1 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
Unhappy viele bugs (wortwörtlich)

ich habe es jetzt endlich geschafft den käfer richtig zu bewegen, und wollte nun mehre instanzen des käfers haben:

ActionScript:
  1. e1 = 0;
  2. numofbugs = 5;
  3. while (e1<numofbugs) {
  4.     e1++;
  5.     this.onEnterFrame = function() {
  6.         //
  7.         //variablen werden erstellt:
  8.         if (this["bug"+e1].vars != 1) {
  9.             duplicateMovieClip(bug, "bug"+e1, e1);
  10.             this["bug"+e1].rotationspeed = 0;
  11.             this["bug"+e1].display = 0;
  12.             this["bug"+e1].vars = 1;
  13.             this["bug"+e1].minx = 0;
  14.             this["bug"+e1].miny = 0;
  15.             this["bug"+e1].maxx = 550;
  16.             this["bug"+e1].maxy = 400;
  17.             this["bug"+e1]._x = Math.random()*this["bug"+e1].maxx;
  18.             this["bug"+e1]._y = Math.random()*this["bug"+e1].maxy;
  19.         }
  20.         //rotation:
  21.         this["bug"+e1].rotation = Math.random()*20-10;
  22.         this["bug"+e1].rotationspeed = this["bug"+e1].rotationspeed+(this["bug"+e1].rotation/10);
  23.         if (this["bug"+e1].rotationspeed>10) {
  24.             this["bug"+e1].rotationspeed = 10;
  25.         }
  26.         if (this["bug"+e1].rotationspeed<-10) {
  27.             this["bug"+e1].rotationspeed = -10;
  28.         }
  29.         //bewegung aus rotation
  30.         this["bug"+e1]._rotation = this["bug"+e1]._rotation+this["bug"+e1].rotationspeed;
  31.         this["bug"+e1].w = (this["bug"+e1]._rotation+180)/180*Math.PI;
  32.         this["bug"+e1].yspeed = Math.sin(this["bug"+e1].w);
  33.         this["bug"+e1].xspeed = Math.cos(this["bug"+e1].w);
  34.         this["bug"+e1].display = this["bug"+e1]._rotation;
  35.         if (this["bug"+e1]._x+this["bug"+e1].xspeed<this["bug"+e1].minx or this["bug"+e1]._x+this["bug"+e1].xspeed>this["bug"+e1].maxx) {
  36.             this["bug"+e1].xspeed = 0;
  37.             this["bug"+e1].yspeed = this["bug"+e1].yspeed-this["bug"+e1].yspeed/5;
  38.         }
  39.         if (this["bug"+e1]._y+this["bug"+e1].yspeed<this["bug"+e1].miny or this["bug"+e1]._y+this["bug"+e1].yspeed>this["bug"+e1].maxy) {
  40.             this["bug"+e1].yspeed = 0;
  41.             this["bug"+e1].xspeed = this["bug"+e1].xspeed-this["bug"+e1].xspeed/5;
  42.         }
  43.         //positionierung
  44.         this["bug"+e1]._x = this["bug"+e1]._x+this["bug"+e1].xspeed;
  45.         this["bug"+e1]._y = this["bug"+e1]._y+this["bug"+e1].yspeed;
  46.     };
  47. }

jetzt sieht man aber auch nur einen käfer egal wie hoch ich numofbugs stelle!

hilfe und VIELEN DANK!
sauerkraut ist offline   Mit Zitat antworten
Alt 02-02-2004, 15:49   #2 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
ergibt doch keinen sinn

numofbugs war vom ursprünglichen programmierer dafür vorgesehen, dass der user angibt wieviel käfer er erstellt hat
nicht wieviel das script erstellen soll nehme ich mal stark an

und was soll das?du soltlest das script verstehen nich nur punktuell
ActionScript:
  1. e1 = 0;
  2. numofbugs = 5;
  3. while (e1<numofbugs) {
  4.         e1++;
  5.         this.onEnterFrame = function() {
  6. //duplicate...
  7. //...
  8. }
dupliziert wird außerhalb des enterFrames, innerhalb der schleife!
dann auf den aktuellen käfer das enterFrame anwenden UND innerhalb des scripts auf den käfer per this verweisen

deluxe

Geändert von Deluxe (02-02-2004 um 15:50 Uhr)
Deluxe ist offline   Mit Zitat antworten
Alt 02-02-2004, 15:57   #3 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
LOL also erstmal ich habe das ganze script grade selber geschrieben
und dann:
wenn ich das script immer nur auf den aktuellen käfer anwende wird sich jeder käfer nur 1 mal bewegen ^^
ich will ja dass das script auf alle bis jetzt erstellten käfer angewendet wird weswegen ich jedesmal e1 hochzähle und bei jedem hochzählen an die ganzen variablen ranhänge! ich will ALLE erstellten käfer bewegen nicht nur den zuletzt erstellten ^^ willst du mir erählen dass cih mein eigenes script nicht verstehe ?

ich verstehe nur nicht wieso desch nich klappt

edit: ok aber das mit on enter frame da verstehe ich was das prob ist

edit2:
so klappts:

NUUUUUR:
jetzt läuft das ganze irgendwie derbst lahm ^^

ActionScript:
  1. if(defunc != 1) {
  2. movebug = function() {
  3.         //
  4.         //variablen werden erstellt:
  5.         if (this["bug"+e1].vars != 1) {
  6.             duplicateMovieClip(bug, "bug"+e1, e1);
  7.             this["bug"+e1].rotationspeed = 0;
  8.             this["bug"+e1].display = 0;
  9.             this["bug"+e1].vars = 1;
  10.             this["bug"+e1].minx = 0;
  11.             this["bug"+e1].miny = 0;
  12.             this["bug"+e1].maxx = 550;
  13.             this["bug"+e1].maxy = 400;
  14.             this["bug"+e1]._x = Math.random()*this["bug"+e1].maxx;
  15.             this["bug"+e1]._y = Math.random()*this["bug"+e1].maxy;
  16.         }
  17.         //rotation:
  18.         this["bug"+e1].rotation = Math.random()*20-10;
  19.         this["bug"+e1].rotationspeed = this["bug"+e1].rotationspeed+(this["bug"+e1].rotation/10);
  20.         if (this["bug"+e1].rotationspeed>10) {
  21.             this["bug"+e1].rotationspeed = 10;
  22.         }
  23.         if (this["bug"+e1].rotationspeed<-10) {
  24.             this["bug"+e1].rotationspeed = -10;
  25.         }
  26.         //bewegung aus rotation
  27.         this["bug"+e1]._rotation = this["bug"+e1]._rotation+this["bug"+e1].rotationspeed;
  28.         this["bug"+e1].w = (this["bug"+e1]._rotation+180)/180*Math.PI;
  29.         this["bug"+e1].yspeed = Math.sin(this["bug"+e1].w);
  30.         this["bug"+e1].xspeed = Math.cos(this["bug"+e1].w);
  31.         this["bug"+e1].display = this["bug"+e1]._rotation;
  32.         if (this["bug"+e1]._x+this["bug"+e1].xspeed<this["bug"+e1].minx or this["bug"+e1]._x+this["bug"+e1].xspeed>this["bug"+e1].maxx) {
  33.             this["bug"+e1].xspeed = 0;
  34.             this["bug"+e1].yspeed = this["bug"+e1].yspeed-this["bug"+e1].yspeed/5;
  35.         }
  36.         if (this["bug"+e1]._y+this["bug"+e1].yspeed<this["bug"+e1].miny or this["bug"+e1]._y+this["bug"+e1].yspeed>this["bug"+e1].maxy) {
  37.             this["bug"+e1].yspeed = 0;
  38.             this["bug"+e1].xspeed = this["bug"+e1].xspeed-this["bug"+e1].xspeed/5;
  39.         }
  40.         //positionierung
  41.         this["bug"+e1]._x = this["bug"+e1]._x+this["bug"+e1].xspeed;
  42.         this["bug"+e1]._y = this["bug"+e1]._y+this["bug"+e1].yspeed;
  43.     };
  44.     defunc = 1;
  45. }
  46. e1 = 0;
  47. numofbugs = 2;
  48. while (e1<numofbugs) {
  49.     e1++;
  50.     movebug()
  51. }

Geändert von sauerkraut (02-02-2004 um 16:05 Uhr)
sauerkraut ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:05   #4 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
lahm = zu viele enterframes

viellecith ,nsnt ud es so umabuen dass immer nur ein onenterframe für die bwegung JEDES käfers gilt

naja dann bewegen sie sich aber alle gleich oder?
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:06   #5 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
nene da ist ja überhaupt kein OnEnterFrame drin! ausserdem läuft es jetzt auch mit einem einzigen käfer langsam obwohl das vorher super geklappt hat!
sauerkraut ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:06   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
alles klar
blöden anglizisten

ALSO
weiterhin
kalr du setzt den enterFrame event momentan im root(nebenbei unnötigerweise 5x durch die whileschleife) um dort die käfer zu erstellen und später auch zu bewegen

mit einem riesen vergnügen darf ich dir jetzt beibringen dass genau diese logik deinen fehler ausmacht

dein el wird hochgezählt-willste ja damit du 5 käfer etc erstellen kannst
dananach steht el bei 5 und jetzt darfste raten welche käfer nurnoch mit deinem enterFrame event angesprochen wird?
nummero 5.

ALSO
dein duplicate rausziehen, das enterFrame für ein einzelnes individium umschreiben

Code:
for(var i=0;i<anzahl;i++){
   duplicate usw
   aktKaefer=_root[bug+...
   aktKäfer.onEnterFrame=function(){
      //...
   }
}
wer zu letzt lacht

deluxe

btw: wenn du die el werte im enterFrame erhöhen würdest und dort auch immer wieder bei null anfangen läßt würde dein script auch hinhauen- aber auch dazu brauchste die while schleife nicht!

edit: he du änder dein script nicht während ich schreibe
da war nen enterFrame *g

Geändert von Deluxe (02-02-2004 um 16:08 Uhr)
Deluxe ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:12   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
so bvor ich mich im alten post verwirre:

ActionScript:
  1. if(defunc != 1) {
  2. //definition
  3.                 defunc = 1;
  4. }
  5. e1 = 0;
  6. numofbugs = 2;
  7. while (e1<numofbugs) {
  8.         e1++;
  9.         movebug();
  10. }

warum prüfste ob schonmal definiert wurde?wird mehrmals auf das frame gesprungen?in ner scheife?
nein?also weglassen
läuft das zeugs auch mit den im bsp. erstellten 2 käfern?
nein sinds mehr- dann wunder dich nicht dass es bei 300 käfern ruckelt

immernoch unnötiger balast in form von einmaligen aktionen:
und immernoch ist es da das erstellen, laß es doch außerhalb der funktion.davor ?

ActionScript:
  1. while (e1<numofbugs) {
  2.         e1++;
  3.         movebug();
  4. }

und was is wenn e1 numofbugs erreicht hat? wie springste auf 0 zurück?

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:15   #8 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
garnicht ^^ das ist nur im eröffnungspost *lach

also komischweise wurde das script langsam wenn die function im frame stand AUCH wenn ihr definierung mit der if schleife übergangen wurde! jetzt hab ich die definierung in frame eins und springe von frame 3 immer zu frame 2 zurück wo die function für die mit numofbugs bestimmte menge an käfern steht ! und jetzt krabeln grad fröhlich 5 käfer über meinen bildschirm ^^ danke für eure mühe leute
sauerkraut ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:18   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
und damit ich zufrieden bin und du noch ne if-abfrage weniger hast

erstelle die viecher doch dann auch gleich im ersten frame

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:25   #10 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
lol geh weg ^^
sauerkraut ist offline   Mit Zitat antworten
Alt 02-02-2004, 16:48   #11 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
schiete:

ActionScript:
  1. while (this["bug"+e1].count<numofbugs) {
  2.         this["bug"+e1].count = this["bug"+e1].count+1;
  3.         if (this.hitTest([bug add this["bug"+e1].count]._x, [bug add this["bug"+e1].count]._y, true)) {
  4.             numofbugs = numofbugs+1;
  5.         }
  6.     }

so willich testen ob der bug einen andren berührt, und wenn ja soll ein neuer bug erstellt werden...klappt aber nicht

Geändert von sauerkraut (02-02-2004 um 16:50 Uhr)
sauerkraut ist offline   Mit Zitat antworten
Alt 02-02-2004, 20:09   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ich hab jetzt nicht alles gelesen, da bekommt man ja schon wanzen, allein vom angucken des listings ;-)
muss nicht unbedingt sein, aber wie wäre es mit dieser schönheitsoperation?

Code:
var Bug=this["bug"+e1];
if (Bug.vars != 1) {
   duplicateMovieClip(bug, "bug"+e1, e1);
   Bug=this["bug"+e1];
   Bug.rotationspeed = 0;
   Bug.display = 0;
	...
nachtrag:
also anstelle der 1000 mal this["bug"+e1]
das den rechner nur einmal ermitteln lassen und ab dann kurz und schnell alles mit Bug ansprechen.
hat nichts mit deinem problem zu tun, ist mir nur aufgefallen wie "aufgebläht" der code ist (ganz oben der).
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (02-02-2004 um 21:44 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 02-02-2004, 21:18   #13 (permalink)
Flash-Bang
 
Registriert seit: Jan 2004
Beiträge: 210
ähhhhh?
hast du meine frage irgendwie gelesen?
sauerkraut 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 11:05 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele