Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-12-2008, 15:06   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 2
onClipEvent(mouseDown) Problem bei duplizierten MC in einem Spiel

Hallo Community

Ich habe mich heute etwas mit Flash (CS3, AS2) auseinandergesetzt und bin auf ein kleines Problemchen gestossen. Vielleicht kann mir jemand einen Tipp geben...

Das Ziel ist ein Game ähnlich wie Moorhuhn. Das Gameplay habe ich eigentlich auch ganz gut hingekriegt - die Ziele (Movieclip mit Vogel) werden mit duplicateMovieClip zufällig generiert und fliegen über die Leinwand. Dem Movieclip ist im mouseDown-Event die Funktion schuss() hinterlegt, die den MC als Parameter mitgeben.
Code:
onClipEvent(mouseDown) {
	schuss(this);
}
In der Funktion Schuss wird überprüft, ob "der Vogel abgeschossen" wurde. Auch hat es noch ein Haus, das man evtl. trifft.
Code:
_global.schuss = function(obj) {
hitBird = obj.hitTest(_root._xmouse, _root._ymouse, true);
hitHouse = _root.house.hitTest(_root._xmouse, _root._ymouse, true);
if (hitBird) {
    obj.gotoAndPlay("tot");
    return true;
}
if (hitHouse) {
    hausZittert();
    return true;
}
(hat natürlich noch mehr Code drin).

So weit, so gut. Klappt alles wunderbar.

Nun wird ja für jeden Vogel auf der Leinwand die Funktion schuss() ausgeführt. Das heisst, wenn zwei Vögel hintereinander fliegen bzw. sich auf der gleichen Höhe kreuzen, werden beide erschossen. Solche "Multikills" möchte ich verhindern.
Zudem ist da noch das Haus, hinter dem einige Vögel durchfliegen. Klappt auch wunderbar, Vögel hinter dem Haus sterben nicht und es gibt einen Schütteleffekt (da man ja in sein Haus schiesst) und ein bisschen Rauch.
Wenn jetzt aber ein Vogel VOR dem Haus ist, wird der Vogel zwar erschossen (Funktion schuss() für den Vogel, auf den man gezielt hat), aber das Haus wird trotzdem getroffen (Funktion schuss() für einen anderen Vogel auf der Leinwand, den man ja verfehlt hat).

Zur Veranschaulichung habe ich mein bisheriges Spiel mal hochgeladen, da sieht man das Problem besser:
http://thats-me.ch/flash-test/index.html

Ich möchte nun also irgendwas in diesem Stil machen:
- Wenn ein Vogel getroffen wird, werden alle nachfolgenden mouseDown-Events für die übrigen Vögel nicht mehr durchgeführt.
- Wenn das Haus getroffen wird, wird noch nicht geschüttelt, sondern gewartet, bis alle übrigen mouseDown Events ausgeführt wurden. Vielleicht ist ja noch ein Vogel vor dem Haus, dann darf nicht geschüttelt werden.. (sorry für meine Ausdrücke )

Was gibt es für Lösungsansätze?
Ich habe mir überlegt, dass ich in der Funktion schuss() alle "Treffer" in einen Array schreiben könnte, noch ohne die ganzen Effekte und ohne dass ein Vogel sterben muss. Diesen Array würde ich dann durchlaufen, sobald alle mouseDown Events fertig ausgeführt wurden. Da hätte ich allerdings wieder das Problem, dass ich nicht weiss, wo ich den Code hinschreiben soll, der wirklich erst am Schluss nach allem anderen ausgeführt wird...
Oder mache ich allgemein einen Denkfehler? Soll ich die Funktion schuss() nicht für jedem Vogel-MC ausführen, sondern nur 1x und die erstellten Vögel in einem Array speichern und danach bei jedem Klick durchlaufen und prüfen ob einer getroffen wurde? Wie gesagt, ich bin neu in Flash und suche nach möglichen Varianten, will ja schliesslich auch was lernen

Besten Dank für jede Antwort.

Grüsse
tschooli ist offline   Mit Zitat antworten
Alt 10-12-2008, 15:24   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Wenn du MCs mit duplicateMovieClip duplizierst, werden die Scripte nicht mitkopiert. Besser also mit attachMovie arbeiten und die Scripte auf der Hauptzeitleiste lassen...
  Mit Zitat antworten
Alt 10-12-2008, 20:08   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 2
Wirklich? Die werden nicht übernommen? Hat aber funktioniert..

Egal, habs jetzt eh so gemacht dass ich jeder duplizierte MC in einen Array speichere und beim "schiessen" dieses Array durchlaufe und schaue, was alles getroffen wurde. Jetzt klappt alles prima. Weiss allerdings nicht, ob dies die beste/performanteste Lösung ist.
tschooli 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:02 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele