kategoria: Hollywood
[#1] [Hollywood] IsKeyDown i licznik
Cześć.

Napotkałem pewien dziwny problem w Hollywood. Wykorzystuję w moim przykładzie funkcję IsKeyDown i sprawdzam czy wciśnięta jest spacja. Jeśli tak to zwiększam licznik o 1 (powiedzmy, że z zakresu 1-10). Tymczasem przy pierwszym wciśnięciu licznik od razu idzie w górę do 10. Zakładam, że problem jest po tej stronie, że pętla goni tak szybko że jedno wciśnięcie przycisku liczy kilka razy. Tylko jak to obejść? Dodam, że wstawienie jakiegoś WaitTimer(1, 1000) przed podbiciem wartości k może i pomoże, ale nie chcę ograniczać wydajności kodu.

Przykładowy prostacki kod:

k = 0

l = 0

StartTimer(1)

Function p_IsKeyDown()
	
	If 
	
		IsKeyDown("SPACE") And k < 10
		
		k = k + 1
					
	EndIf
	
EndFunction

While GetTimer(1) < 10000

	p_IsKeyDown()

	If k > l

		DebugPrint(k)
		
		l = k

	EndIf
	
Wend


Ostatnia aktualizacja: 01.05.2022 09:16:36 przez recedent
[#2] Re: [Hollywood] IsKeyDown i licznik

@recedent, post #1

a nie powinienes zlapac nastepnie iskeyup dla tego klawisza by wykryc ze zostal puszczony (up) zanim sprawdzisz znowu wcisniecie (down)?
[#3] Re: [Hollywood] IsKeyDown i licznik

@juen, post #2

Tylko że nie ma takiej funkcji

A jeśli w głównej pętli warunkuję wywołanie funkcji p_IsKeyDown od tego czy IsKeyDown zwraca aktualnie wartość False to jakoś-to-działa, ale trochę losowo (trzeba się "wstrzelić").

Ostatnia aktualizacja: 01.05.2022 09:21:25 przez recedent
[#4] Re: [Hollywood] IsKeyDown i licznik

@recedent, post #3

Spróbuj przedefiniować pętlę:

1. Ustaw zmienną pomocniczą "SpaceKey" na FALSE.

2. Jeżeli "SpaceKey" jest FALSE oraz IsKeyDown("SPACE") jest TRUE to ustaw zmienną "SpaceKey" na TRUE oraz teraz podejmij akcję: zwiększ licznik "k" o 1.

W przeciwnym przypadku jeżeli "SpaceKey" jest TRUE oraz IsKeyDown("SPACE") jest FALSE to ustaw zmienną "SpaceKey" na FALSE.

3. Czekasz dalej w głównej pętli i podejmujesz ewentualne inne akcje i przechodzisz do punktu 2.

Ostatnia aktualizacja: 01.05.2022 09:51:43 przez Hexmage960
[#5] Re: [Hollywood] IsKeyDown i licznik

@Hexmage960, post #4

Coś w ten deseń?

k = 0

l = 0

spacja = 0

StartTimer(1)

Function p_IsKeyDown()
	
	If 
	
		IsKeyDown("SPACE") And k < 10 And spacja = 0
		
		k = k + 1
		
		spacja = 1
		
		Else If IsKeyDown("SPACE") = False And spacja = 1
		
		spacja = 0
		
	EndIf
					
	EndIf
	
EndFunction

While GetTimer(1) < 10000

	p_IsKeyDown()
			
		If k > l And spacja = 1

		DebugPrint(k)
		
		l = k

	EndIf
	
Wend
[#6] Re: [Hollywood] IsKeyDown i licznik

@recedent, post #5

Tak. Przy czym w Twojej głównej funkcji, "k" będzie wypisywane wielokrotnie podczas trzymania spacji. Można przenieść DebugPrint(k) w odpowiednie miejsce, tzn. po "k = k + 1".
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem