2 Fragen... (2 Probleme - keine leichten) - Und Weiteres

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Ich würde sagen, bei den Schleifen, die runterzählen, muss es in der while-Klammer ">" statt "<" heißen ;)
Use gopher repellent on funny little man
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Mittlerweile habe ich es so gelöst:

Code: Alles auswählen

function Kollision (int Zahl) {
  ViewFrame *frame = Game.GetViewFrame(player.View, player.Loop, player.frame);
  int PlayerBreite = Game.SpriteWidth[frame.Graphic];
  int PlayerHoehe = Game.SpriteHeight[frame.Graphic];
	int Breite = (player.x + (PlayerBreite/2) - Droops[Zahl].Xpos);
	int Hoehe = (player.y - Droops[Zahl].Ypos);
	int ZusammenY = PlayerHoehe + 17;
	int ZusammenX = PlayerBreite + 14;
	if (Hoehe > ZusammenY) return false;
	else if (Hoehe < 0) return false;
	else if (Breite > ZusammenX) return false;
	else if (Breite < 0) return false;
	else return true;
}
Nun funktioniert es, wie ich es will.

Frage am Rande: Sind euch auch Probleme mit player.frame = irgendwas; bekannt? Denn bei mir funktioniert das an manchen Stellen überhaupt nicht, obwohl ich weit und breit keinen Fehler erkennen kann... :?:
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Ich würd's mal mit "player.Frame" probieren. Falls .frame ein Überbleibsel aus einer älteren Version ist, kann es durchaus zu merkwürdigem Verhalten kommen.
Use gopher repellent on funny little man
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Schade, hat nichts gebracht. Aber trotzdem danke.
Es muss wohl an etwas anderem liegen... Was dagegen, wenn ich das Script poste, das mir am meisten Probleme bereitet?

Code: Alles auswählen

	if ((IsKeyPressed (380) == true) && (Gelandet () == true)) {
		links = false;
		rechts = false;
		ducking = true;
		if (player.View != 6) player.ChangeView (6);
		if (Duckstatus == 2 && player.Frame < 1){ player.Frame = 1; Display ("%d", player.Frame); }
		else if (Duckstatus != 2) Duckstatus = 2;
	}
... Es geht um einen Loop, in dem 2 Frames sind... Ich will, dass wenn die "Nach unten" Taste gedrückt ist, zuerst das eine Frame und beim nächsten Durchlauf der repeatedly_execute das nächste Frame angezeigt wird und es so bleibt... Aber es wird immer nur das erste Frame angeszeigt. Irgendeine Idee, woran das liegen könnte?
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Erst mal was Nebensächliches:

Code: Alles auswählen

if (IsKeyPressed (380) && Gelandet ())
reicht :)

Hmm, etwas genauer bitte:
Welches Frame wird angezeigt, 0 oder 1?
Was besagt Duckstatus genau?
Use gopher repellent on funny little man
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Welches Frame wird angezeigt, 0 oder 1?
Es wird leider nur Frame 0 angezeigt... Allerdings steht in dem Display, dass ich nach der Änderung des Frames anzeigen lasse, "1". Das ist reichlich verwirrend, weil wirklich nur Frame 0 angezeigt wird....
Was besagt Duckstatus genau?
Duckstatus ist eine Variable, mit der ich bewirken wollte, dass frame 1 erst beim 2. Durchlauf der repeatedly_execute angezeigt wird.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Ich vermute mal, dass die Änderung von Character.Frame keine Neuzeichnung des Bildschirms erzwingt.
Setz mal testweise ein "Wait(1);" hinter die Änderung.
Use gopher repellent on funny little man
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Beitrag von Timer »

Jetzt ist es GANZ seltsam:
Es scheint sich immer abzuwechseln. Also bei einer Schleife wird Frame 1 angezeigt, bei der nächsten Frame 0, dann wieder Frame 1 - Das sieht so aus, als würde er zittern. :lol:


... Problem erledigt. Der Fehler lag an einer Function etwas weiter unten, bei dem eine Bedingung gefehlt hat. Das erklärt nun auch alle anderen Probleme, die ich mit player.Frame hatte. :roll:
Danke für die Hilfe!
Antworten