![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 23.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam taki problem.
Ma taki fragment kodu:
Powyższy kod działa tak, że jak naciskam szczalkę w lewo to się wykonuje coś, również jak ją prztrzymam. Mój problem polega na tym, że jak trzymam strzałkę w lewo, ciągle się wykonuje kod, i jak w trakcie trzymania tej strzalki nacisnę coś innego to już ten kod się nie wykonuje. Aby to prościej zobrazować chce uzyskać efekt chodzenia i skakania w grze, że trzymam strzałkę chodzenia cały czas, i w między czasie mogę podskoczyć ale aby nie przestawać iść. Jak to wykonać ? Próbowałem przez keypress ale działa tak samo jak keydown (przynajmniej ja nie widzę różnicy. Jak rozwiązać mój problem ? Jakieś pomysły ? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Źle zabrałeś się do problemu. Nie możesz wykonywać akcji w momencie wciśnięcia przycisku. W takim przypadku prędkość poruszania się gracza byłaby uzależniona od tego, jak często system operacyjny ponawia zdarzenie "keydown"/"keypress".
Powinieneś nasłuchiwać na zdarzenia keydown oraz keyup i w obu kolejno zapisywać informację o wciśnięciu przycisku w jakiejś tablicy/obiekcie i usunięciu jej. Na tym powinna zakończyć się rola tego fragmentu programu. Samo wykonywanie logiki gry powinno zostać przeniesione do tzw. głównej pętli, gdzie będziesz aktualizował stan gry (np. pozycja gracza) i aktualizował interfejs w przypadku konieczności. Sama pętla powinna wykonywać się: 1) Ze stałą prędkością, np. 60 FPS 2) Tak szybko jak to tylko możliwe (uwzględniając faktyczny czas wykonania pojedynczej iteracji), ale nie szybciej niż X FPS-ów (nie ma sensu katować komputera 1500 FPS-ami przy prostej grze). 3) Jeżeli gra nie potrzebuje aktualizować swój stan jedynie w przypadku jakiś zdarzeń od użytkownika, w obu listenerach na ich końcu możesz wywołać funkcję odświeżającą grę. Przykład: http://jsfiddle.net/adqcL/ (z wykorzystaniem jQuery)
Ten post edytował Crozin 24.03.2014, 21:59:14 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 23.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Kurczę, wielkie dzięki za pomoc
![]() ![]() ![]() ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 21:44 |