Antworten auf deine Fragen:
Neues Thema erstellen

MOORHUHN KLON - teufelskreis mit lokaler variable für gegner

pdpdpd

medianer

Hallo Leute!

Seit ca. 2 Wochen bastel ich an meinem Moorhuhn-Klon als Projektarbeit. Bin sehr gut vorangekommen und finde AS 3 ziemlich cool. Es ist eigentlich schon fast alles fertig: Wechsel zwischen Szenen, Musik abspielen und stoppen, Trefferquotient ausgeben, Sonnenbewegung auf elliptischer Bahn, eine komplette Funktion für das Nachladen nach 6 Schuss. Ich bin stolz. Aber auf eine Sache, die mir zum Ende fehlt (und die das wichtigste ist!) komme ich einfach nicht.

Ich habe nun sehr lange an der addChild Funktion für meine Viecher gesessen, eh ich das verstanden habe.

Diese habe ich nun erfolgreich eingebunden und mir dann eine Bewegung für die Viecher erstellt. Hier der Code:



addEventListener (Event.ENTER_FRAME, handleMakillaCreation);
function handleMakillaCreation (event:Event):void
{
//Gegner werden neben der Bühne hinzugefügt
if (enemyTime < enemyLimit) {
enemyTime ++;
} else {
var newMakilla = new GraphicMakillaAlive();
newMakilla.x = -1 * newMakilla.width;
newMakilla.y = int(Math.random()*(stage.stageHeight - newMakilla.height));
addChild (newMakilla);
//damit Fadenkreuz und Menüleiste nicht von Makillas verdeckt werden
MovieClip(root).setChildIndex (newMakilla,MovieClip(root).numChildren-17);
enemyTime = 0;

var speedX:Number = Math.random()*1+3;
var startY:Number = Math.random()*250;
var flightRadiusY:Number = Math.random()*250+70;
var flightAmplitude:Number = 0;

addEventListener(Event.ENTER_FRAME, makillaMovement);
function makillaMovement (event:Event):void
{
newMakilla.x = newMakilla.x + speedX;
newMakilla.y = startY + Math.sin(flightAmplitude)*flightRadiusY;
flightAmplitude += Math.random()*0.005+0.012;
}

newMakilla.addEventListener (MouseEvent.CLICK, handleMakillaHit);

function handleMakillaHit (event:MouseEvent):void
{
trace ("handleMakillaHit()");
handleMakillaDeath ();
}

function handleMakillaDeath ():void
{
newMakilla.gotoAndPlay ("death");
handleHitCounter ();
soundDead.play ();
//damit man ein Makilla nicht mehrmals abschießen kann
newMakilla.removeEventListener (MouseEvent.CLICK, handleMakillaHit);
}

function handleHitCounter ():void
{
hits ++;
hits_txt.text = "HITS: "+hits;
}
}
}




so. mein PROBLEM ist:
da ich ja "gezwungen" bin, die Variable "newMakilla" innerhalb der funktion zu definieren, kann ich diese ja nicht außerhalb verwenden.

ich hatte aber schonmal außerhalb bereits funktionen definiert, die wenn die "munition=0" ist, den EventListener für den Abschuss entfernt, und wenn der Nachladevorgang abgeschlossen ist, wird er wieder hinzugefügt. das kann ich jetzt nicht mehr machen. man soll ja die biester nicht auch abknallen können, wenn die kanone alle ist. und nach dem reload sollte das schon wieder ordentlich klappen.

Ich wollte das nun auch schon da rein schreiben in die Funktion, aber das läuft nicht korrekt, da ja dann immer "onEnterFrame" der Eventlistener hinzugefügt wird.

Hat jemand einen Vorschlag wie ich das in Angriff nehmen kann?

Vielen Dank im Voraus.

pd
 

tukinu

Fotografiert

AW: MOORHUHN KLON - teufelskreis mit lokaler variable für gegner

hallo,

also gezwungen wird man nie was als locale var zu definieren ;-)
wenn ich es richtig sehe, erstellst du zwei onEnterFrame listeners, das sollte man nie machen (macht die app langsamer und kann zu grossen problemen führen)

ich erkenne aber nicht genau warum du die newMakilla im onEnterFrame erstellen musst? kannst evtl. mehr code posten?
 
A

ad86

Guest

AW: MOORHUHN KLON - teufelskreis mit lokaler variable für gegner

Hi,

mal eine Frage: Wieviel Klassen nutzt Du?
Ich hätte nämlich für die Feind (das Moorhuhn) eine Klasse erstellt. Im Konstruktor geben ich dann die Werte für x, y, speed, etc. mit.
Diese Klasse hat dann drei öffentliche Methoden startMove() und stopMove, die die Animation starten bzw. stoppen. Die dritte Miethode ist zum Setzen der Munition setKillable (true) (->ob noch Munition vorhanden ist oder nicht). Diese Klasse selbst hat dann einen MouseListener und der überprüft, ob das Moorhuhn erlegt wurde, sollte isKillable (Boolean-Wert für genug Munition) true sein.
Und jedes Mal, wenn ein Moorhuhn getroffen ist, löst Du ein Ereignis aus, auf dass die Hauptklasse hört.

IN einer Methode in der Hauptklasse, die zufällig aufgerufen wird, werden EIN Feind auf die Bühne gelegt. Die Feinde selbst sind in einem Array-Objekt gespeichert, das Du am Anfang füllst.
Wäre mein Vorschlag für dein Spiel. Ich hoffe Du verstehst,was ich meine und es hilft Dir.

MFG ad86
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.487
Neuestes Mitglied
MichaelSEivy
Oben