Hilfe bei Gegnerzahl in Spiel

Versuch mal folgendes (zu Eingrenzungszwecken):

- Kommentier den ganzen Block Ball-HitTest aus (was passiert dann?)

- Packe an den Anfang des Schnecken-HitTest-Blocks ein Trace("SCHNECKE!"). Wird das Wort bei Kollision ausgegeben? Wenn ja, funktioniert zumindest die Objektkollision.

- Was genau macht die Funktion Schnecke.zuruecksetzen()?

- Alle relevanten Variablen "tracen": Schneckenkontakt, ZeitSchnecke, Score...

- Was passiert in Bild 3 des Schiffes? Blöde Frage, aber mir ist es schon passiert, dass ich mich bei der Positionierung um 1 oder 2 Frames vertan habe, ohne es zu bemerken. Oder steckt da vielleicht ein verstecktes stop() oder so in Bild 3 (oder 4)?

- Ersetze das gotoAndPlay(2) im Ball-HitTest in ein gotoAndPlay(3). Geht das?

- Ersetze einfach nur das hitTest(_root.Ball) in hitTest(_root.Schnecke). Was passiert?
 
- Kommentier den ganzen Block Ball-HitTest aus (was passiert dann?)

Durch reines Kommentieren passiert doch garnichts

- Packe an den Anfang des Schnecken-HitTest-Blocks ein Trace("SCHNECKE!"). Wird das Wort bei Kollision ausgegeben? Wenn ja, funktioniert zumindest die Objektkollision.

Funktioniert.

- Was genau macht die Funktion Schnecke.zuruecksetzen()?

Sie setzt sie Schnecke zurück ausserhalb der Spielfläche, sodass sie wieder neu als Gegner eingesetzt wird.

- Was passiert in Bild 3 des Schiffes? Blöde Frage, aber mir ist es schon passiert, dass ich mich bei der Positionierung um 1 oder 2 Frames vertan habe, ohne es zu bemerken. Oder steckt da vielleicht ein verstecktes stop() oder so in Bild 3 (oder 4)?

In Bild 3 des Schiffes passiert nichts, ausser eine kleine (beabsichtigte) stop(); funktion, denn es soll keine Animation anfahren, sondern sich einfach das Bild des Raumschiffes ändern.

- Ersetze das gotoAndPlay(2) im Ball-HitTest in ein gotoAndPlay(3). Geht das?

Nö.

- Ersetze einfach nur das hitTest(_root.Ball) in hitTest(_root.Schnecke). Was passiert?

Alles spielt verrückt, aber die Kollisionsabfrage scheint zu gehen.
 
Zitat:
--------------------------------------------------------------------------------
- Ersetze das gotoAndPlay(2) im Ball-HitTest in ein gotoAndPlay(3). Geht das?
--------------------------------------------------------------------------------

Nö.
Wenn das nicht funktioniert, dann liegt der Fehler nicht an Deiner Objektkollision (die ja auch zu funktionieren scheint), sondern an den Dingen, die da so ab Bild 3 passieren...

Versuch doch mal, in der Schneckenabfrage statt in Bild 3 in Bild 2 zu springen - müsste eigentlich funktionieren (d.h. das Schiff sollte sich wie bei einer Ballkollision verändern).

Sollte es daran liegen: Vielleicht kannst Du mal einen Ausschnitt aus der Schiffszeitleiste ab Bild 3 posten, samt dazugehörigem AS.
 
Oh dear - da ist in der Tat nicht viel zu holen... :)

Hmm - ist jetzt vielleicht eine blöde Idee, aber hast Du's mal mit gotoAndStop() statt gotoAndPlay() versucht? (Ich meine mich dunkel zu erinnern, dass ich einmal versucht hatte, "spielend" zu einem Frame zu springen, der ein stop() enthielt - mit bemerkenswerten Resultaten)

...

Ansonsten:
Versuch doch mal, in der Schneckenabfrage statt in Bild 3 in Bild 2 zu springen
... bzw einfach ein viertes Bild anzuhängen, und das stop() dorthin packen.

P.S.: Irre ich mich, oder müsste das Schlüsselwort "stop()" nicht blau unterlegt sein (oder hast Du das abgeschaltet)?
 
Zuletzt bearbeitet:
Funktioniert alles leider nicht. Soll ich dir das File mal per e-Mail schicken, vielleicht bringt das was ?
 
Ich habe jetzt ein viertes Schlüsselbild mit genau dem selben Inhalt erstellt und es geht - anscheinend. Denn nach einer Sekunde (oder weniger) ist das Bild wieder weg. Hier die Codes:

PHP:
// Bild 3:
stop();

// Bild 4:
gotoAndPlay(3);

// Ich habe auch schon Probiert:

//B3
nichts
//B4
stop();

// B3
stop();
//B4
gotoAndStop(3);

Woran liegt das ? Der Rest des Codes vom Raumschiff (weiter oben) ist gleich geblieben! Und wenn ich den anderen Gagner (den Ball) bereits berührt habe, und die Zeit von seinem Bild noch nicht abgelaufen ist und ich die Schnecke berühre, dann gehts.

Also, fals man das nicht verstanden hat: wenn ich vorher den Ball "aktiviere" und dann die Schnecke, dann gehts
 
Zuletzt bearbeitet:
Muh! Ich hab den Fehler herausbekommen. Ich bin einfach alles nocheinmal durchgegangen und bin darauf gekommen, dass das Bild zwar angezeigt wird, aber immer Wieder zurückgestellt wird!

PHP:
onClipEvent(load) {
	function Schnecke_Anzeigen() {
		this.gotoAndPlay(2);
	}
	Geschwindigkeit = 10;
	scrollx=_root.Sterne.Sternenfeld._width/2;
	scrollStart=false;
	_root.Laser._visible=false;
	LaserZahl=1;
	Ballkontakt=0;
	Schneckenkontakt=0;
	_root.score = 0;
}

onClipEvent (enterFrame) {
		if (this.hitTest(_root.Schnecke)){	
				Schneckenkontakt = 1;								
				Zeitbegrenzung = getTimer();
				_root.score -= 750;
				_root.Schnecke.Szuruecksetzen();
				Schnecke_Anzeigen();
				 												
				if(_root.Energie.Energiestand<6) {					
					_root.Energie.Energiestand+=1;				
					_root.Energie.gotoAndPlay(_root.Energie.Energiestand);	
				}
				
				if(_root.Energie.Energiestand==6) {					
					_root.gotoAndPlay("Game Over");															
				}
		}
		if (this.hitTest( _root.Ball)){							
				Ballkontakt = 1;								
				Zeitbegrenzung = getTimer();
				_root.score -= 1000;
				_root.Ball.zuruecksetzen();						
				this.gotoAndPlay(3);							 
												
				if(_root.Energie.Energiestand<6) {					
					_root.Energie.Energiestand+=1;				
					_root.Energie.gotoAndPlay(_root.Energie.Energiestand);	
				}

				if(_root.Energie.Energiestand==6) {					
					_root.gotoAndPlay("Game Over");															
				}
		}
		

	if(Zeitbegrenzung+5000<getTimer()) { // Ich habe nurnoch eine Zeitbegrenzung
		Ballkontakt=0; // Denn durch 2 haben sie dasRaumschiff
		Schneckenkontakt = 0; // immer wieder zurückgesetzt
		this.gotoAndPlay(1); //<--- genau hier
	}
	

	if(Key.isDown(Key.SPACE)) {
		if(Ballkontakt==0) {
			laserZahl++;
		 	_root.laser.duplicateMovieClip( "laser"+laserZahl, laserZahl );
		 	_root["laser"+laserZahl]._visible=true;
		}
 	} 
	if (Key.isDown(Key.RIGHT)) {
 		if(Schneckenkontakt==0) {
			if (this._x<scrollx){
				this._x+=Geschwindigkeit;
			} else {
				scrollStart=true;
			}
		}
		if(Schneckenkontakt==1) {
			this._x-=Geschwindigkeit;
		}
	}
	else if (Key.isDown(Key.LEFT)) {
 		if(Schneckenkontakt==0) {
			this._x-=Geschwindigkeit;
		}
		if(Schneckenkontakt==1) {
			if (this._x<scrollx){
				this._x+=Geschwindigkeit;
			} else {
				scrollStart=true;
			}
		}
	}
	if (Key.isDown(Key.DOWN)) {
	 	if(Schneckenkontakt==0) {
			this._y+=Geschwindigkeit;
		}
		if(Schneckenkontakt==1) {
			this._y-=Geschwindigkeit;
		}
	} 
	else if (Key.isDown(Key.UP)) {
		if(Schneckenkontakt==0) {
			this._y-=Geschwindigkeit;
		}
		if(Schneckenkontakt==1) {
			this._y+=Geschwindigkeit;
		}
	}
}

onClipEvent (keyUp) {
	 if(Schneckenkontakt==0) {
		 if (Key.getCode() == Key.RIGHT) {
		 	scrollStart=false;
	 	}
	 }
	 if(Schneckenkontakt==1) {
		 if (Key.getCode() == Key.LEFT) {
		 	scrollStart=false;
	 	}
	 }
}

Das Problem lag also darin, dass ich am Anfang die Zeiten beide auf 0 gesetzt habe, und beide dann, entweder nach 1500 oder 5000 millisekunden (Zeit+1500<getTimer()) -> (0+1500<getTimer()) aktiviert waren. Bei einer ist das ja noch OK, das Raumschiff kann ja solange normal aussehen, bis es mit etwas kollidiert, aber so haben sich beide immer wieder sofort gegenseitig zurückgesetzt, falls ihr versteht was ich meine.

Trotzdem grosseS grosseS DANKE an dich Datic !

Ps: Hätte man auch schneller rauf kommen können :)

Mfg
loeffel
 

Neue Beiträge

Zurück