Z tym problemem miałem styczność niedawno przy pisaniu mojej pierwszej i w dodatku dużej gry, w tym tutorialu opiszę jak ja sobię poradziłem z tym problemem.
Zrobiłem oddzielny program tzw. konfigurator a w nim opcje ustawień klawiszy i trybu graficznego, a po ustawieniach wszystko zapisywane jest w pliku *.ini, zaczynajmy: na początku na formę należy dodać następujące komponenty:
PowerInput
kilka LabeledEdit (dostępne od Delphi 7, użytkownicy starszych wersji Delphi mogą użyć Edit, w każdym właściwość ReadOnly ustaw na True)
Button (z Captionem 'Zapisz’)
W sekcji uses dopisz :
1 |
INIFiles |
W var dodaj :
1 |
ini: TIniFile; |
oraz
1 |
Skok, Kucanie, Lewo, Prawo: byte; |
w FormCreate należy dodać wpis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
PowerInput.Initialize; ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Ustawienia.ini'); try Skok :=ini.ReadInteger('Klawisze', 'Gracz1Skok', 200); Kucanie :=ini.ReadInteger('Klawisze', 'Gracz1Kuc', 208); Lewo :=ini.ReadInteger('Klawisze', 'Gracz1Lewo', 203); Prawo :=ini.ReadInteger('Klawisze', 'Gracz1Prawo', 205); finally ini.Free; |
Liczby na końcu każdej funkcji to domyślne wartości strzałek, program wsadza je do zmiennych jeśli plik ustawienia.ini lub wpis w nim nie istnieje. Teraz procedura sprawdzająca każdy klawisz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
procedure TForm1.Klawisz(var PoleTex: TLabeledEdit); var x: integer; begin PowerInput.Update; for x:=1 to 227 do if PowerInput.Keys[x] then begin PoleTex.Text:=IntToStr(x); break; end; end; |
Działania pętli for chyba nie muszę tłumaczyć 😉
Tylko jeśli chcesz ją użyć to w sekcji type musisz dodać wpis:
procedure Klawisz(var PoleTex: TLabeledEdit);
musisz jej użyć w zdarzeniu OnKeyDown każdego LabeledEdit’a np. tak:
Klawisz(LabeledEdit1);
W każdym musi być nazwa którą dałeś danemu LabeledEdit’owi !!!
Na zakończenie procedura zapisująca wszystkie wartości, jeśli będziesz chciał je odczytać, to musisz użyć procedury którą masz w FormCreate oraz w grze np. w zdarzeniu PowerTimer’a dać wpis np.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
if PowerInput.Keys[Lewo] then Dec(Player.x); Teraz przykładowa procedura, którą możesz dać do OnClick komponentu Button: ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Ustawienia.ini'); try ini.WriteInteger('Klawisze', 'Gracz1Skok', StrToInt(LabeledEdit1.Text)); ini.WriteInteger('Klawisze', 'Gracz1Kuc', StrToInt(LabeledEdit2.Text)); ini.WriteInteger('Klawisze', 'Gracz1Lewo', StrToInt(LabeledEdit3.Text)); ini.WriteInteger('Klawisze', 'Gracz1Prawo', StrToInt(LabeledEdit4.Text)); finally ini.free; |
Program ma działać w taki sposób, że po kliknięciu na pole textowe Edit’a, a potem naciśnięciu jakiegoś klawisza w pole tekstowe jest wpisywana wartość liczbowa PowerInput’owego klawisza. Jeśli nie znasz plików ini to zapoznaj się z innym tutorialem na tej stronie w dziale „Zaawansowane”. Do obsługi PowerInput’a też jest, przyjemnego i długiego pisania gier 😉
Zapomniałem dodać dość ważnej rzeczy. Do FormCreate należy dopisać, aby w każdym LabeledEdit’cie pojawiła się liczba z pliku INI np.
1 |
LabeledEdit1.Text:=IntToStr(Skok); |
Tak do każdej zmiennej i LabeledEdit’a.
Jakbyś miał jakieś pytania to pisz na maila na ssspine@go2.pl
Autor: Spine