Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-02-2012, 16:19   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2012
Ort: Leipzig
Beiträge: 7
Random wiederholte Funktion

Hallo Leute,

ich hätte mal ein paar kleine Fragen zu einem Projekt von mir.

Hier der Codeteil, den es betrifft:
ActionScript:
  1. var abschusssound = new MoorhuhnAbschuss();
  2. var abschusssoundChannel:SoundChannel;
  3.  
  4. var huhnanimation:Timer = new Timer(50,4);
  5. var moorhuhn:MovieClip = new Huhn_mc();
  6. var huhnbildnummer: int = 1;
  7.  
  8. huhnanimation.start();
  9.  
  10. huhnanimation.addEventListener(TimerEvent.TIMER, Huhnbildausgabe);
  11. function Huhnbildausgabe(event:TimerEvent)
  12. {
  13.     moorhuhn.gotoAndStop(huhnbildnummer);
  14.     huhnbildnummer++;
  15. }
  16.  
  17. huhnanimation.addEventListener(TimerEvent.TIMER_COMPLETE, wiederholung);
  18. function wiederholung(event:TimerEvent):void
  19. {
  20.     huhnanimation.reset();
  21.     huhnbildnummer = 1;
  22.     huhnanimation.start();
  23. }
  24.  
  25. var vertikalstart:Number = 400 + Math.floor(Math.random()*(40-400+1));
  26. var flugdauer:Number = 11 + Math.floor(Math.random()*(25-11+1));
  27.  
  28. moorhuhn.x = 0;
  29. moorhuhn.y = vertikalstart;
  30. var moorhuhnFlug:Tween = new Tween(moorhuhn, "x", None.easeInOut,0,2550,flugdauer,true);
  31. hintergrundSpiel.addChild(moorhuhn);
  32.  
  33. moorhuhnFlug.addEventListener(TweenEvent.MOTION_FINISH,
  34.             function()
  35.         {   
  36.             hintergrundSpiel.removeChild(moorhuhn);
  37.         });
  38.        
  39. moorhuhn.addEventListener(MouseEvent.CLICK, Huhnabschuss);
  40. function Huhnabschuss(event:MouseEvent):void
  41. {   
  42.     if (kugelanzahl>0)
  43.     {
  44.     huhnanimation.stop();
  45.     moorhuhn.gotoAndStop(5);   
  46.     score += 25;
  47.     scorefeld.text = String(score);
  48.     scorefeld.setTextFormat(formatscore);
  49.    
  50.     abschusssoundChannel=abschusssound.play();
  51.        
  52.     var moorhuhnAbsturz:Tween = new Tween(moorhuhn, "y", None.easeOut,vertikalstart,550,40,false);
  53.     moorhuhnAbsturz.addEventListener(TweenEvent.MOTION_FINISH,
  54.                     function()
  55.                     {
  56.                         hintergrundSpiel.removeChild(moorhuhn);
  57.                     }
  58.                 );
  59.     }
  60. }

Wie ihr erkennen könnt versuche ich ein Moorhuhn ähnliches Spiel zu basteln.

Der Code funktioniert wunderbar, es tritt nur das Problem auf, dass wenn man das Huhn abschießt es zu einer Fehlermeldung kommt, genau zu dem Zeitpunkt, wenn das Huhn eigentlich seinen normalen Flugtween beendet hätte haben sollen.

Fehlermeldung:

ActionScript:
  1. ArgumentError: Error #2025: Das angegebene DisplayObject muss ein untergeordnetes Element des Aufrufers sein.
  2.     at flash.display::DisplayObjectContainer/removeChild()
  3.     at MethodInfo-125()
  4.     at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
  5.     at flash.events::EventDispatcher/dispatchEvent()
  6.     at fl.transitions::Tween/set time()
  7.     at fl.transitions::Tween/nextFrame()
  8.     at fl.transitions::Tween/fl.transitions:Tween::onEnterFrame()

Könnte mir jemand vielleicht sagen, was ich ändern muss, um diese Fehlermeldung zu umgehen? Vom rein logischen, würde ich ja denken, ich muss für den normalen Flugtween eine Fallunterscheidung machen, einmal wenn das Huhn ankommt, und einmal, wenn es zwischendurch abgeschossen wird.

Das war das eigentlich Problem, jetzt bräuchte ich noch eine funktionierende Idee, wie dieses eine Huhn im verlauf der gesamten Spieldauer mit einem random Zeitabstand immer wieder aufgerufen wird.

Idee:
ActionScript:
  1. var zielnummer:int = 0;
  2.  
  3. countdown.addEventListener(TimerEvent.TIMER, startflug);
  4. function startflug(event:TimerEvent):void
  5. {
  6.     var startzeit:Number = 0;
  7.     for (countdown.currentCount == startzeit;
  8.          countdown.running;
  9.          startzeit = 3 + Math.floor(Math.random()*(1-3+1)) &&
  10.          zielnummer++
  11.          )
  12.  
  13.    
  14. function (event.Event)

Irgendwie sowas vielleicht, wichtig ist halt, dass es ja theoretisch bei jedem Aufruf ein anderes Huhn sein muss.

Ich freuen mich jetzt schon auf eure Ideen und Verbesserungsvorschläge.

Vielen Dank vorab.

Beste Grüße Patrick
Patrick83 ist offline   Mit Zitat antworten
Alt 12-02-2012, 16:36   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ohne mir deinen script tiefer an zu sehen. der fehler besagt, das du versuchst ein objekt zu entfernen, das da garnicht ist.
empfehlung: niemals namenlosen functionen benützen.
Code:
moorhuhnFlug.addEventListener(TweenEvent.MOTION_FINISH,rupfDasHuhn);
...
// das muss es dann auch noch irgendwo geben!
moorhuhnFlug.removeEventListener(TweenEvent.MOTION_FINISH,rupfDasHuhn);


function rupfDasHuhn():void {
  if (moorhuhn && hintergrundSpiel.contains(moorhuhn))
      hintergrundSpiel.removeChild(moorhuhn);
  // .. und alle anderen events usw. zu diesem object müssen auch entfernt werden!
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (12-02-2012 um 17:03 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2012, 16:42   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2012
Ort: Leipzig
Beiträge: 7
Hallo hgseib,

ich danke dir, für deine schnelle Hilfe, klappt super, Fehlermeldung Adé.

Hättest du auch noch einen Tipp für mein anderes Problem?

Danke schonmal.

Beste Grüße Patrick
Patrick83 ist offline   Mit Zitat antworten
Alt 12-02-2012, 16:48   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
was du mit deinem timer vor hast, das habe ich nicht verstanden.

programmiere in OOP und erstelle eine klasse moorhuhn.

du musst die hühner nicht töten ;-)
anstatt removeChild kommt das olle huhn wieder neu von der anderen seite reingeflattert.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2012, 17:11   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2012
Ort: Leipzig
Beiträge: 7
Hallo, wieder danke für die schnelle Antwort.
(Geht sowas hier immer so fix? )

Also das mit dem Timer soll folgender maßen laufen:

Das Spiel dauert 90 Sekunden und ich möchte,
dass alle 1-3 Sekunden (Math.random) ein Huhn vom Rand startet,
so dass immer wieder Hühner auf der Bühne sind.

Nur kann ich da nicht sagen, starte einfach immer wieder "das Huhn", da sonst alle Hühner nur "Huhn" sind und ich alle abschieße, wenn ich eins abschieße,
sondern die Müssten alle eine andere Nummer bekommen, damit jedes individuell beim Abschuss angesprochen wird.

Ich hoffe, jetzt ist etwas besser zu verstehen.

Mit Klassen kenne ich mich noch nicht weiter aus, werde mich aber gleich nochmal belesen, würde mich aber trotzdem über eine kleine Anregung freuen.

Danke vorab für Tipps.

Beste Grüße Patrick
Patrick83 ist offline   Mit Zitat antworten
Alt 12-02-2012, 17:31   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
OOP ist klar, wäre halt besser ...

ist halt so. jedes ding hat seinen sinn. das alle x sekunden ein neues huhn erzeugt werden soll ist, sagen wir mal, sache der landschaft und nicht die des huhns.

erstelle ein mc, darin verwaltest du alle hühner.
ich vermute einmal, auf hintergrundSpiel gibt es nicht nur hühner sondern auch andere sachen
hintergrundSpiel.addChild(moorhuhn);

deshalb besser so:
hintergrundSpiel.huehner.addChild(moorhuhn);
- huehner bekommt den timer
- hittest mit hintergrundSpiel.huehner sagt dir ob irgend ein huhn getroffen wurde, danach noch test mit jedem einzelnen huhn aus hintergrundSpiel.huehner um fest zu stellen welches.

das ist jetzt kein AS3 aber vielleicht kannst du dir da auch was abgucken:
H.G.Seib
-> Spiele (das ZIP)
Invasion: Gegner kommen von oben und sollen getroffen werden
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (12-02-2012 um 17:33 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 12-02-2012, 21:57   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2012
Ort: Leipzig
Beiträge: 7
Hallo,

deine Variante bekomme ich nicht hin. Und auch jeglicher Versuch mit Schleifen das Problem zu lösen ist gescheitert.

Ich kopiere die Hühner jetzt einfach öfter.

Beste Grüße Patrick

Geändert von Patrick83 (12-02-2012 um 22:01 Uhr)
Patrick83 ist offline   Mit Zitat antworten
Alt 12-02-2012, 22:52   #8 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von Patrick83 Beitrag anzeigen
Hallo Leute,

ich hätte mal ein paar kleine Fragen zu einem Projekt von mir.

Hier der Codeteil, den es betrifft:
ActionScript:
  1. var abschusssound = new MoorhuhnAbschuss();
  2. var abschusssoundChannel:SoundChannel;
  3.  
  4. var huhnanimation:Timer = new Timer(50,4);
  5. var moorhuhn:MovieClip = new Huhn_mc();
  6. var huhnbildnummer: int = 1;
  7.  
  8. huhnanimation.start();
  9.  
  10. huhnanimation.addEventListener(TimerEvent.TIMER, Huhnbildausgabe);
  11. function Huhnbildausgabe(event:TimerEvent)
  12. {
  13.     moorhuhn.gotoAndStop(huhnbildnummer);
  14.     huhnbildnummer++;
  15. }
  16.  
  17. huhnanimation.addEventListener(TimerEvent.TIMER_COMPLETE, wiederholung);
  18. function wiederholung(event:TimerEvent):void
  19. {
  20.     huhnanimation.reset();
  21.     huhnbildnummer = 1;
  22.     huhnanimation.start();
  23. }
Was soll denn der Code hier?
Warum spielst du nicht einfach die Animation des MovieClips ab?
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 12-02-2012, 23:21   #9 (permalink)
Neuer User
 
Registriert seit: Feb 2012
Ort: Leipzig
Beiträge: 7
Ich erstelle den MovieClip dynamisch und greife aber zwischendurch auch auf ein einzelnes Bild zu, dass dort mit im Clip liegt, wenn ich den Clip einfach nur abspielen würde, wäre diese "Tot" Bild immer mit zu sehen.

Das habe ich halt so vermieden.
Ist vielleicht umständlich, aber es geht gut.

Beste Grüße Patrick
Patrick83 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
random funktion burn4ever Flash CS3 Professional 3 18-10-2007 08:27
Wiederholte Zufallsauswahl von Pfaden russianborodin Flash MX 2004 1 16-04-2006 18:11
Wiederholte Zufallsauswahl von Pfaden russianborodin Flash Einsteiger 0 14-04-2006 15:52
Random-Funktion up2design Flash MX 2004 4 14-10-2004 14:21
Random Funktion Billy K ActionScript 1 4 21-10-2002 13:51


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele