Ludzie!! O czym Wy piszecie? Takie gry jak GTA pisane są przez duże zespoły profesjonalistów przez kilka(naście) miesięcy, a Wy pewnego dnia budzicie się i stwierdzacie: "ale dziś nudy, chyba napiszę sobie GTA" or something... śmieszne!
Oczywiście nie mówię tego po to, aby Was zniechęcić. Wręcz przeciwnie! Piszcie do bólu, a może w przyszłości przystąpicie do wyżej wspomnianego zespołu.
Ale Wy (niektórzy z Was) próbujecie od razu pisać rzeczy najtrudniejsze i co gorsza: przy pierwszej lepszej porażce prosicie o podanie Wam gotowego kodu. W ten sposób niewiele się nauczycie (o ile w ogóle cokolwiek).
No dobra, to tyle lania wody (czyli tego, czego nie lubię). Czas na konkrety:
matrix753 oprócz tego, że prosił o napisanie połowy kodu za niego, zadał również kilka pytań. Postaram się więc go nakierować, aby po napisaniu w końcu tej gry (jeśli do tego dojdzie) mógł się pod nią podpisać jako pełnoprawny autor.
Co do kierowania samochodem po skosie, to można wykorzystać starą sztuczkę (z gier pod DOSa). Pozwala ona na obsługę praktycznie wszystkich klawiszy na raz. Chodzi o to, aby stworzyć sobię tablicę wartości logicznych o długości równej ilości przetwarzanych znaków. Pod DOSem było to trochę łatwiejsze do wykonania, ale pod Windę też się da. np:
(sorry, że piszę w C++, ale jestem w nim bieglejszy - ale wszystko powinno być jasne)
[code] bool klawisze[256]; //przykładowa tablica[/code]
w zdarzeniu OnKeyDown należy wstawić wartość [b]true[/b] do tej tablicy pod indeksem zależnym od klawisza, np:
[code]void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{klawisze[Key] = true;
}
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{klawisze[Key] = false;
}[/code]
W ten sposób można obsługiwać takie klawisze jak Shift, Ctrl, CapsLock itp. tak samo jak wszystkie inne.
I teraz dla przykładu wstawiasz sobię Timera i:
[code]void __fastcall TForm1::Timer1Timer(TObject *Sender)
{int x = 0, y = 0;
if (klawisze[VK_LEFT]) x -= 1;
if (klawisze[VK_RIGHT])x += 1; //jeśli wciśnięty jest lewy i prawy, to x == 0
if (klawisze[VK_UP]) y -= 1;
if (klawisze[VK_DOWN]) y += 1;
if (klawisze[VK_SHIFT]) //speed
{x *= 10;
y *= 10;
}
//poniżej to TYLKO przykład
PozycjaSamochodu.X +=x;
PozycjaSamochodu.Y +=y;
}[/code]
Mam nadzieję, że ten post trochę wyjaśnił. Jeśli nie, to pytaj dalej (tylko tym razem niech to będą rozsądne pytania!!).