Zeitverzögerung

Hallo!
Ich programmier das PacMan Spiel , ich hab nun zwei Geister eingefügt nur ich möchte das sie Zeitverzögert laufen ich hab das mit Sleep(1000) versucht jedoch funktioniert das nciht. Was mache ich falsch oder wie muss ich es machen.
danke

Code:
#include <allegro.h>
#include <windows.h>

void fataler_fehler() {
		allegro_message(allegro_error);
		exit(1);	
}
int main() {
	
	allegro_init();
	if (install_keyboard() < 0) {
		fataler_fehler();
	}
	set_color_depth(24);
	if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0) < 0) {
		fataler_fehler();
	}

	BITMAP *bmp = NULL;
	BITMAP *ghost = NULL;
	BITMAP *ghost1 = NULL;
	
	bmp = load_bitmap("pac800.bmp", NULL);
	if (bmp == NULL) {
		allegro_message("Konnte die Bitmap-Datei nicht finden");
		exit(1);		
	}
	ghost = create_sub_bitmap(bmp, 0, 0, 36, 36); /*öffnet den Geist*/
	Sleep(10000);
	ghost1 = create_sub_bitmap(bmp, 0, 72, 36, 36); /*öffnet den Geist*/
	

int x = 0; /*ObenRand*/ 
int y = 0; /*LinkerRand*/
int RechterRand = 764; /*der wert 800 minus der höhe des Objektes (z.b. Geist)*/
int UntererRand = 564; /*der wert 600 minus der breite des Objektes (z.b. Geist)*/
int RaufRunter = 0;
int LinksRechts = 1;

while(!keypressed()) { /*wenn keine Taste gedrueckt wurde*/

x = x + LinksRechts;
y = y + RaufRunter;

/*vsync();*/
/*clear_bitmap(screen);*/
draw_sprite(screen, ghost, x, y); /*(x,y)anfangskoordinaten wo der geist beginnt*/
draw_sprite(screen, ghost1, x+200, y+10); /*(x,y)anfangskoordinaten wo der geist beginnt*/


if(x == RechterRand && LinksRechts == 1 && RaufRunter == 0) { /* x muss = RechterRand(764) & LinksRechts =1 & RaufRunter=1 sein dann laeuft er runter*/
LinksRechts = 0;
RaufRunter = 1;
}

if(x == 0 && LinksRechts == -1 && RaufRunter == 0) { /* x muss = 0 & LinksRechts =1 & RaufRunter=1 sein dann laeuft er runter*/
LinksRechts = 0;
RaufRunter = -1;
}

if(y == UntererRand && LinksRechts == 0 && RaufRunter == 1) {
LinksRechts = -1;
RaufRunter = 0;
}

if(y == 0 && LinksRechts == 0 && RaufRunter == -1) {
LinksRechts = 1;
RaufRunter = 0;
}

}

	/*destroy_bitmap(ghost);
	destroy_bitmap(bmp);*/



	return 0;
} END_OF_MAIN()
 
Moin,

ich weiß zwar nicht, was Deine Fkt. "create_sub_bitmap" genau macht, aber ich würde mal vermuten, dass sie lediglich das Objekt im Speicher anlegt und bereitstellt.
Die Darstellung auf dem Bildschirm passiert doch wohl durch das "draw_sprite" mit anschließendem Positionswechsel, oder

So wie ich es sehe, werden dabei beide Objekte gleichzeitig dargestellt und eben nicht verzögert!

Gruß
Klaus

EDIT:versuch mal, das "sleep" zwishen die beiden "draw_sprite" zu packen .....
 
Zuletzt bearbeitet:
HI!
Das habe ich shcon versucht und das funktioniert nicht vielleicht ahb ich mcih fasch ausgedrückt also die Geschwindigkeit soll unterschiedlich sein von denen.
gruß
 
Moin,

stimmt, das war leider ein Schnellschuss - und zudem Blödsinn!
Deine Funktionen "create_sub_bitmap" erzeugen ja nur die Bitmaps .- hier dürfte der zeitliche Abstand ebenso egal sein, wie beim festlegen der Anfangskoordinaten ("draw_sprite").

Was ich mich allerdings frage, was genau in Deiner while-Scheife das Bewegen der Geister bewirken soll! Ich vermute mal :
x = x + LinksRechts;
y = y + RaufRunter;

Dies wirkt sich dann ja IMMER auf beide gleichzeitig aus!

Was meinst Du überhaupt genau mi8t "Zeitverzögerung"?
Reicht es, wenn der zweite Geist erst im 2., 3. oder oder 10. Schleifendurchlauf beginnt? ? ?:confused:

Gruß
Klaus
 
Hi!
Ja das wirkt sich auf beide Geister aus da geht es aber nur darum das sie nciht aus meinem bereich laufen. Ich möchte das die Geister unterschiedliche Geschwindigkeiten haben also der eine Geist ist langsamer als der andere.
 
Moin,
dann wirst Du sie auch unterschiedlich behandeln müssen!
Entweder in eigenen Schleifen oder durch eine zeitlichen Faktor!
Allerdings sehe ich so nicht, wo sich das in der von Dir geposteten Schleife auswirken sollte, da dort ja 'nur' die Positionswechsel festgelegt werden!
Gruß
Klaus

EDIT: nur so als Idee: Du kannst vielleicht eine unterschiedliche Geschwindigkeit dadurch erzielen, dass sich die Positionsänderungen bei Ghost1 nur beii jeden zweiten Schleifendurchlauf auswirken (über eine alterniernde Variable steuern, oder so) .....
 
Zuletzt bearbeitet:
Hi!
also ich hab jetzt noch versucht weiter zu recherchieren, jedoch komm ich einfach nicht weiter wie ich das lösen kann das jeder Geist eine unterscvhiedliche Geschwindigkeit hat. Kann mir bitte jemand helfen.
Gruß
 
Zurück