funkcja clock(), aplikacja się zawiesza podczas 'odpalania' pocisku

0

Hejo, dobry wieczór,

Otóż mam taki problem, przy wciśnięciu spacji chcę zrobić 'blokadę', która uniemożliwi graczowi spamowanie spacją, która odpowiada za uwolnienie pocisku. Próbowałem to zrobić z funkcją Clock(), lecz zawiesza mi aplikację. Kod wygląda tak:

	while (opuscil_menu && in_game) {
		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue_stage, &ev);
		clock_t startTime;

		if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
			switch (ev.keyboard.keycode){
 			case ALLEGRO_KEY_SPACE:
			keys[SPACE] = true;
			if (((clock() - startTime) / CLOCKS_PER_SEC) >= 0) {
			temp = add_bullet(pos_x, pos_y + 20, kierunek);
			shot = 1;
			bullets[temp].alive = 1;
                        }
                        break;
                     }
		}

		else if (ev.type == ALLEGRO_EVENT_KEY_UP)
		{
			case ALLEGRO_KEY_SPACE:
				keys[SPACE] = false;
				if (shot == 1) {
					shot = 0;
				}
				startTime = clock();
				break;
} 
1
  1. Zrób sobie zmienną typu float o nazwie timer z wartością = -1.0f.
  2. Przy przy naciśnięciu spacji sprawdzasz czy timer ma wartość <= 0, jeśli tak, to wystrzeliwujesz pocisk.
  3. Po wystrzeleniu pocisku ustaw timer na czas cooldownu pocisku (np. 0.5f - pół sekundy).
  4. W głównej pętli gry, jeśli timer jest > 0, to odejmuj od niego czas trwania klatki.

Jeśli wszystko zaprogramujesz jak należy, to będzie działać ;)

1
  1. Zrób sobie zmienną typu float o nazwie timer z wartością = -1.0f.
  2. Przy przy naciśnięciu spacji sprawdzasz czy timer ma wartość <= 0, jeśli tak, to wystrzeliwujesz pocisk.
  3. Po wystrzeleniu pocisku ustaw timer na czas cooldownu pocisku (np. 0.5f - pół sekundy).
  4. W głównej pętli gry, jeśli timer jest > 0, to odejmuj od niego timera czas trwania klatki.

Jeśli wszystko zaprogramujesz jak należy, to będzie działać ;)

0

Czy mógłbym Cię @Spine prosić, byś dokładniej wytłumaczył punkt trzeci? Nie rozumiem kroku odjąć 'odejmij od niego timer czas trwania klatki'. W jaki sposób? W sensie co to znaczy odjąć to rozumiem :D, ale nie rozumiem czasu trwania klatki.

@Edit

Nie ważne, zrobiłem :D, jakoś tak to miało wyglądać?

tajmer = tajmer - (1.0 / FPS); 

Dziękuję i pozdrawiam serdecznie

1
Tytanowyy napisał(a):

Nie ważne, zrobiłem :D, jakoś tak to miało wyglądać?

tajmer = tajmer - (1.0 / FPS); 

No, może to tak wyglądać, ale najlepiej będzie jak w Twoim "silniku" dla tego 1.0/FPS zrobisz zmienną, np. deltaTime. Bo wyobraź sobie jakbyś miał 10 takich cooldownów. Nie dość, że to zaciemnia kod, to jeszcze wykonujesz niepotrzebnie 10 dzieleń.

1 użytkowników online, w tym zalogowanych: 0, gości: 1