| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #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);
} 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;
} 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 |
| | |
| | #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. |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |