ustawienia sterowania

ustawienia sterowania
NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

Witam. Mam problem pozornie prosty ale sobie nie radze.
Chcę w allegro zrobić ustawienia sterowania ale bez tysiaca if'òw

Kopiuj
If (key [KEY_SPACE])
{

}

Da się to zrobić standardowymi funkcjami allegro?

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
2

ten kod co masz w cialach ifow wydeleguj do osobnych metod typu "OnKeyUpPressed()", zrob slownik: <pozycja w tablicy klawiszy, wskaznik do poprzedniej metody>, potem w forze sprawdzaj czy klawisz na danej pozycji zostal wcisniety, i jesli tak wywoluj funkcje. Mozna to rozbudowac do rozpatrywania roznych typow zdarzen, oraz mozna zamienic mape na tablice jesli numery klawiszy zaczynaja sie od 0, a nie np. od 0xfffffff, wtedy zamiast robic dodatkowa artymetyke lepiej zrobic slownik.

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

A po polsku? sorka ale coś nie rozumiem tego

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 535
0

ogólnie tego... nie jestem jakoś super dobry w tych rzeczach... można tak krok po kroku wytłumaczyć?

satirev
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
#include <iostream>
#include <functional>
#include <map>
using namespace std;

void OnLeftKeyDown() {
	cout << "Left key is down!\n";
}

void OnRightKeyDown() {
	cout << "Right key is down!\n";
}

enum Key {
	KEY_LEFT = 0,
	KEY_RIGHT
};
	
std::map<Key, std::function<void()>> KeysMap;

int main() {
	KeysMap[KEY_LEFT] = OnLeftKeyDown;
	KeysMap[KEY_RIGHT] = OnRightKeyDown;
	
	auto keyHandler = KeysMap.find(KEY_LEFT);
	if (KeysMap.end() != keyHandler) {
		keyHandler->second();
	}
	
	return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.