Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-01-2004, 20:05   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
"Runterfall-und-auffang-spiel" nachbauen!

Hallo Jungs und natürlich auch mädels

so, bin endlich wieder mal ein bisschen am flashen!!!

Wollte so ein "Runterfall-und-wieder-auffang-Spiel" nachbasteln,
mit Score und Leveln usw. Naja, ich habe es bereits designt und
alles, nur bin ich jetzt ans actionscript angelangt, und schon
begegnen mir die ersten Probleme!!!

Ich habe ein MC,
und dort will ich die runterfall-dingens attachen!
Das ist gegangen, doch möchte ich natürlich auch
noch weitere anhängen, und die natürlich auch fallen lassen!

ich hab mal so angefangen:

ActionScript:
  1. onClipEvent(enterFrame){
  2.    
  3.     this.attachMovie("melone","f_melone"+count1, 100 + count1);
  4.         with (this["f_melone"+count1]) {
  5.             _x = 180;
  6.             onEnterFrame = function(){
  7.                 this._y += _root.speed;
  8.             }
  9.         }
  10. }

Jetzt ist aber das Problem, dass ich bei der onenterframe funktion
nicht auf den attachten MC melone zugreifen kann
so wie ich es jetzt habe, bewegt sich der ganze MC nach unten
bewegt, ist ja klar, benutze ja auch this!! wie kann ich dies umgehen????

Ach ja, und dann habe ich noch bemerkt, dass ich mit onEnterFrame
nicht wirklich benutzen kann, da ich im Parent-MC nur einen
Frame habe!
Dort müsste ich am besten mit SetIntervall arbeiten, oder nicht?
Da arbeite ich mich aber noch rein, also ist diese Frage auch nicht
wirklich relevant

Danke im Voraus

Griessli H.2.O
Hasch2o ist offline   Mit Zitat antworten
Alt 07-01-2004, 21:07   #2 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
du attachest onenterframe ?

btw, onenterframe brauch nur einen frame
warrantmaster ist offline   Mit Zitat antworten
Alt 07-01-2004, 21:48   #3 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
//hast mich inspiriert
ActionScript:
  1. melone = setInterval(initmelone,1500,5,12,100,_root);//5 auf einaml /12 speed und 100 max
  2. initschuessel(_root,5);
  3.  
  4. function initmelone(aufeinmal,speed,maxmelonen,pfad){
  5.   if(_root.melonen_ff < maxmelonen){
  6.     for(var i=0; i<aufeinmal; i++){
  7.         _root.melonen_ff++;
  8.         pfad.attachMovie("melone","melone" add _root.melonen_ff,_root.melonen_ff+10);
  9.         breite = pfad["melone" add _root.melonen_ff].width/2;
  10.         hoehe = pfad["melone" add _root.melonen_ff].height/2;
  11.         pfad["melone" add _root.melonen_ff]._x =  breite + random( (Stage.width-breite) );
  12.         pfad["melone" add _root.melonen_ff]._yrandom(hoehe*2);
  13.         pfad["melone" add _root.melonen_ff].onEnterFrame = function()
  14.             {
  15.             this._y += random(speed);
  16.             if(this._y > Stage.width - hoehe)
  17.                 {
  18.                 this.removeMovieClip();
  19.                 }
  20.             }
  21.         }
  22.   } else {
  23.     clearInterval(melone)
  24.   }
  25. }
  26.  
  27. function initschuessel(pfad,aufeinmal){
  28.     //init anzeige
  29.     pfad.createTextField("melonentf",1234567890,(Stage.width - 15),10,10,10);
  30.     pfad.melonentf.autoSize = "right";
  31.     pfad.melonentf.background = true;
  32.     pfad.melonentf.border = true;
  33.     pfad.melonentf.text = " "+_root.melonen+" ";
  34.     //init anzeige
  35.     pfad.removeMovieClip();
  36.     pfad.attachMovie("schuessel","schuessel",9);
  37.     pfad.schuessel.onEnterFrame = function()
  38.             {
  39.                 this.startDrag(true);
  40.                 for(var i=_root.melonen_ff - aufeinmal*2; i<_root.melonen_ff; i++){
  41.                     if(pfad["melone" add i].hitTest(this._x,this._y,true))
  42.                         {
  43.                             _root.melonen ++;
  44.                             pfad.melonentf.text = " "+_root.melonen+" ";
  45.                             pfad["melone" add i].removeMovieClip();
  46.                         }
  47.                 }
  48.             }
  49. }

//nur der zufalls speed ist noch ziemlich einheitlich !

Ps. Ichschaff nie mehr als 90
Angehängte Dateien
Dateityp: zip melone.zip (5,6 KB, 61x aufgerufen)
__________________
--- :P ---

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

Geändert von _geo_ (07-01-2004 um 21:59 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 07-01-2004, 22:16   #4 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
wau, wahnsinn

Danke dir vielmals!!

Jetzt muss ich nur noch verstehen was du genau gemacht hast!


Griessli H.2.O
Hasch2o ist offline   Mit Zitat antworten
Alt 07-01-2004, 22:46   #5 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
ich bitte fehler zu entschuldigen !

ActionScript:
  1. // die var melone wird auf das setInterval "referenziert" (heißt das so ?) also der setInterval
  2. //bekommt praktisch nen namen, die 1500 sind 1.5 sekunden (millisek) danach kommen die parameter
  3. //für die initmelone funktion die ja alle 1.5 sek aufgerufen wird
  4. melone = setInterval(initmelone,1500,5,12,100,_root);//5 auf einaml /12 speed und 100 max
  5. //die intischuessel erzeugt dir die schuessel in Klammer wieder die parameter
  6. //der erste der pfad wo die schuessel hin soll (_root) und der zweite, die anzahl der melonen
  7. //die pro aufruf der initmelone funktion attacht werden
  8. initschuessel(_root,5);
  9.  
  10.  // die funktion initmelone mit den parameter angaben
  11.  //aufeinmal = 5, sind die melonen die gleichzeitig erscheinen sollen
  12.  // speed ist der speed mit dem sie fallen (wird später noch mit random modifiziert)
  13.  //maxmelonen = wie viele melonen maximal runterkommen sollen = 100
  14.  //pfad wieder der pfad wo die melonen attacht werden sollen (wie bei der schuessel)
  15. function initmelone(aufeinmal,speed,maxmelonen,pfad){
  16.         if(_root.melonen_ff < maxmelonen){ //_root.melonen_ff ist ne "globale" var die ich zum raufzählen verwende
  17.         // sie enthält die zahl der schon attachten melonen
  18.         // in der if wird überprüft ob schon mehr als das max attacht wurden
  19.         //wenn nein dann werden noch weitere attacht
  20.                 for(var i=0; i<aufeinmal; i++){//die for schleife legt fest wie viele melonen auf einaml runterkommen
  21.                 // i von 0 bis aufeinmal (=unser parameter)
  22.                         _root.melonen_ff++;//wenn 1 melone attacht wird dann wird unsere melonen zählvariable
  23.                         //natürlich auch um 1 erhöht
  24.                         pfad.attachMovie("melone","melone" add _root.melonen_ff,_root.melonen_ff+10);
  25.                         //in der var pfad (parameter) wurde der pfad gespeichert, du könntest hier genauso _root hinschreiben
  26.                         //so jetzt wird 1 melone attacht mit neuem namen der name ist "melone#" das # ist unsere melonen
  27.                         //zählvariable, also wir bekommen melone1 melone2 ... bis melone100, die tiefe der melone muss auch mit
  28.                         //angegeben werden, damit wir keinen konflikt mit mcs die auf unteren stufen liegen bekommen fangen wir bei 10
  29.                         //an zu zählen mit den tiefen (kannst auch bei 100 oder 1000 anfangen[=+1000 oder so])
  30.                         // die tiefen sind dann 10,11,12,13,14 also melone1:tiefe11 melon2:tiefe12 usw.
  31.                         breite = pfad["melone" add _root.melonen_ff].width/2;//die breite der melone wird zwischengespeichert
  32.                         hoehe = pfad["melone" add _root.melonen_ff].height/2;//die höhe der melone wird zwischengespeichert
  33.                         pfad["melone" add _root.melonen_ff]._x =  breite + random( (Stage.width-breite) );
  34.                         // die melone wir zufällig auf die breite des films verteilt wobei
  35.                         // wir die variable "breite" nützen um sie nicht über den rand hinaus schaunen zu lassen
  36.                         pfad["melone" add _root.melonen_ff]._yrandom(hoehe*2);
  37.                         //die y koordinaten lassen wir auch etwas varieren damit nicht alle auf gleicher höhe anfangen
  38.                         // wäre doch fad (du kannst der faktor 2 auch erhöhen[aber nicht zu viel])
  39.                         pfad["melone" add _root.melonen_ff].onEnterFrame = function()//der enterFrame der melone wird definiert
  40.                         {
  41.                                 this._y += random(speed);//der speed mit dem die melone fallen soll ja
  42.                                 //auch nicht immer gleich sein, sonst würden sie ja fast parallel herunterfallen
  43.                                 if(this._y > Stage.width - hoehe)//wenn die melone unter den unteren rand fällt kommt sie weg
  44.                                 {
  45.                                         this.removeMovieClip();//damit der onEnterFrame keine performance mehr frisst
  46.                                         //(wenn du willst kannst du sie ja oben wieder hereinkommen lassen)
  47.                                         // das wäre dann statt remove "this._y -= Stage.width;"
  48.                                 }
  49.                         }
  50.                 }
  51.         } else {// das else ist noch von der abfrage ob schon genug melonen da sind, wenn ja
  52.                 clearInterval(melone);//dann wird der interval gelöscht und es kommen keine melonen mehr
  53.         }
  54. }
  55.  
  56. function initschuessel(pfad,aufeinmal){//wieder eine funktion mit parametern
  57.         //init anzeige // hier wird einfach ein textfeld erstellt das rechts oben sitzt und die melonen anzeigt die erwischt wurden
  58.         pfad.createTextField("melonentf",1234567890,(Stage.width - 15),10,10,10);
  59.         pfad.melonentf.autoSize = "right";
  60.         pfad.melonentf.background = true;
  61.         pfad.melonentf.border = true;
  62.         pfad.melonentf.text = " "+_root.melonen+" ";
  63.         //init anzeige
  64.  
  65.         pfad.attachMovie("schuessel","schuessel",9);//es wird nur eine schuessel attacht, die braucht eh keinen anderen namen als "schuessel"
  66.         pfad.schuessel.onEnterFrame = function()//der onenterframe der schuessel wird definiert
  67.         {
  68.                 this.startDrag(true);// sie wird erstmal gedragt
  69.                 for(var i=_root.melonen_ff - aufeinmal*2; i<_root.melonen_ff; i++){ // dann wird überprüft ob
  70.                 //die schuessel eine kollision mit einer der momentan am bildschirm befindlichen melonen hat
  71.                 //daher auch die for schleife, es werden die letzten 2*aufeinmal melonen gettested (also bei uns die letzen 10 die erstellt wurden)
  72.                         if(pfad["melone" add i].hitTest(this._x,this._y,true))// hier ist der hittest
  73.                         {
  74.                                 _root.melonen ++;// wenn ein treffer ist also schuessel position = melone position dann
  75.                                 // werden die "gefangenen melonen um 1 weitergezählt"
  76.                                 pfad.melonentf.text = " "+_root.melonen+" ";// und im textfeld angezeigt
  77.                                 pfad["melone" add i].removeMovieClip();// damit die melone nicht weiterfliegt wird sie wieder "entsorgt"
  78.                         }
  79.                 }
  80.         }
  81. }
  82.  
  83. // jop und fertig
  84.  
__________________
--- :P ---

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

Geändert von _geo_ (08-01-2004 um 13:05 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 07-01-2004, 23:17   #6 (permalink)
meistens harmlos
 
Benutzerbild von rena
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 17.643
Boah .. sauber! Das nenn ich mal 'nen Service. Kompliment!

Aber ich krieg manche nicht gefangen, da kann ich ewig mit der Schüssel drauf sein. Wäre es nicht sinnvoller, in diesem Beispiel den Melonen die hitTest-Prüfung mitzugeben? Haben ja eh auch 'nen enterFrame-Event.

Gruß
rena
__________________
www.rena-hermann.de

The angels have the phone box
rena ist offline   Mit Zitat antworten
Alt 08-01-2004, 12:09   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
*Augenausdemkopffallundlangezeitnichtmehrwiederfin d*

danke für diesen wahnsinnsservice!

Nur habe ich eine Frage, ich habe bevor ich die Frage gepostet
habe etwas ähnliches probiert!
nur wenn ich es so gemacht habe, wie in meinem script, ganz
am anfang, dann verschiebt es mir den ganzen movieclip von
dem ich das Script aus aufrufe! ich möchte aber nur die melone
runterfallen lassen!!!

ich hab das ja folgendermassen gemacht:
ActionScript:
  1. with (this["f_melone"+count1]) {
  2.                 _x = 180;
  3.                 onEnterFrame = function(){
  4.                         this._y += _root.speed;
  5.                 }

da ist ja klar, das wenn ich this benutze, dass es auf den
ausführenden MC referenziert! aber als ich den pfad angegeben
habe hat sich gar nichts mehr gerührt woran könnte das
liegen???

Griessli und nochmal danke, werde heute
abend gleich nochmal rangehen!

H.2.O
Hasch2o ist offline   Mit Zitat antworten
Alt 08-01-2004, 12:48   #8 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
als bei mit funktioniert das schon
ActionScript:
  1. count1 = 1
  2. _root.speed = 5;
  3. with (this["f_melone"+count1]) {
  4.         _x = 180;
  5.         onEnterFrame = function(){
  6.                 this._y += _root.speed;
  7.         }
  8. }

@rena: Danke für das Komplimet 1000 mal zurückgeschenkt

Ich hab den melonen den hitTest nicht mitgegeben, weil ich performance sparen wollte und hab daher nur den einen hitTest auf der schuessel gemacht.

Naja vielleicht hab ich ja zu viel gespart

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 08-01-2004, 12:52   #9 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
hier nochmal in nem file
Angehängte Dateien
Dateityp: zip melonenfall.zip (4,6 KB, 22x aufgerufen)
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker
_geo_ ist offline   Mit Zitat antworten
Alt 08-01-2004, 17:35   #10 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
Schau dir mal dies an!!
wenn du es so machst, dann fällt das ganze!
und ich möchte, das nur f_melone1 nach unten
bewegt wird!!!

Das übersteigt jedoch meine Erfahrung!!!

Weiss jemand weiter??

Griessli und danke
H.2.O
Angehängte Dateien
Dateityp: zip melonenfall_falsch.zip (5,1 KB, 9x aufgerufen)
Hasch2o ist offline   Mit Zitat antworten
Alt 08-01-2004, 17:50   #11 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
//das kommt davon wenn man(=ich) nicht genau genug schaut *grml
ActionScript:
  1. onClipEvent(load){
  2.     count1 = 1
  3.     _root.speed = 5;
  4.     with (this["f_melone"+count1]) {
  5.             _x = 180;
  6.             this.onEnterFrame = function(){//this
  7.                     _y += _root.speed;
  8.             }
  9.     }
  10. }

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 08-01-2004, 18:16   #12 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
Da komm ich jetzt nicht mehr mit!

wobei ich etwas nicht begreife, warum
machst du vor dem enterframe noch mal
ein this????
ActionScript:
  1. onClipEvent(load){
  2.         count1 = 1
  3.         _root.speed = 5;
  4.         with (this["f_melone"+count1]) {
  5.                 _x = 180;
  6.                 this.onEnterFrame = function(){//this
  7.                         _y += _root.speed;
  8.                 }
  9.         }
  10. }

was haben diese änderungen bezweckt??

Griessli H.2.O
Hasch2o ist offline   Mit Zitat antworten
Alt 08-01-2004, 18:20   #13 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
so woies aussieht braucht das onEnterFrame noch einen pfadangabe,dass es also solches "richtig erkannt wird"

hab das gefühl wenns ohne this ist schmeißt er auch das with über bord und wendet das _y += auf das aufrufende mc an.

warums aber so ist kann ich dir auch nicht sagen

[edith]
ActionScript:
  1. onClipEvent(load){
  2. count1 = 1
  3. _root.speed = 5;
  4. pfad = this["f_melone"+count1]
  5. with (pfad) {
  6.         _x = 180;
  7.         onEnterFrame = function(){
  8.                 _y += _root.speed;
  9.  trace(targetPath(this));//test
  10.         }
  11. }
  12. }

lag wohl doch nicht am onEnterFrame sondern am with, komisch finden ich auch, dass bei trace(targetPath(this)) _level0.instance1 ausgegeben witrd und nicht _level0.f_melone1

__________________
--- :P ---

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

Geändert von _geo_ (08-01-2004 um 18:32 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 08-01-2004, 18:24   #14 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
ok, so ähnlich geht es mir auch
Hasch2o ist offline   Mit Zitat antworten
Alt 08-01-2004, 18:56   #15 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Tokyo (J)
Beiträge: 273
hmmm...habe nochmal ein problem:

ich bin gerade dein script am anpassen...
(achja, danke nochmal )
und ich habe es so aufgebaut:

ActionScript:
  1. onClipEvent(load){
  2.     var_Time = (math.random()/2+0.25)*1000;
  3.     Game = setInterval(falling_mel,var_Time);
  4. }
  5. //----------------------------------------------------------
  6. function falling_mel(){
  7.     if(_root.available_hands > 0){
  8.         _root.melone++;
  9.         this.attachMovie("mel","mel" add _root.melone, 100 + _root.melone);
  10.         with (this["melone" add _root.melone]){
  11.             _x = math.random()*340+10;
  12.             this.onEnterFrame = function(){
  13.                 _y += _root.speed;
  14.                 if (this._y > 320){
  15.                     removeMovieClip();
  16.                     _root.available_hands--;
  17.                     _root["handili"+_root.availabale_hands].gotoAndPlay(2);
  18.                 }
  19.             }
  20.         }
  21.     }else{
  22.         clearInterval(Game);
  23.     }
  24. }

wenn ich es nun testen möchte, dann bringt er mir folgende fehlermeldung:
PHP-Code:
Scene=Scene 1Layer=PlaygroundFrame=1Line 7Statement must appear within on/onClipEvent handler
function falling_mel(){ 
Griessli
Carlo

PS: thx fürs edit!!
habe ich erst jetzt gesehen!
Hasch2o 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:36 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele