• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z SDL2

Object Storage Arubacloud
0 głosów
390 wizyt
pytanie zadane 15 maja 2015 w C i C++ przez Nasos Bywalec (2,730 p.)
zamknięte 17 maja 2015 przez Nasos

Witam

Jakiś czas temu tworzyłem grę w SDL2 i teraz chciałbym do niej powrócić, ale nie mogę sobie poradzić z jedną rzeczą. Problem polega na tym że moby poruszają się tylko i wyłącznie wtedy, gdy gracz się porusza lub rusza się myszką po ekranie gry. Jeśli porusza się myszką wszystko działa bardzo płynnie, a jeśli porusza się postacią to reszta porusza się z taką samą częstotliwością. Na dodatek w mojej grze myszka nie spełnia żadnej funkcji(no oprócz poruszania mobami która jest niechciana). Aby wszystko było jasne - moby i npc mają się poruszać gdy nic się nie robi.

Oto część kodu która prawdopodobnie wymaga zmiany:

while (!quit)
	{
		okno.mob.x += 1;
		SDL_WaitEvent(&okno.kbdEvent);
		switch(okno.kbdEvent.type)
		{
		case SDL_KEYDOWN:
			switch (okno.kbdEvent.key.keysym.sym)
			{
			case SDLK_DOWN:

Moje pytanie brzmi jak to zapisać, aby wszystko się normalnie poruszało?

komentarz zamknięcia: Przesiadłem się na SFML, wygląda na to że problem dotyczył tylko mnie

1 odpowiedź

0 głosów
odpowiedź 15 maja 2015 przez Mister123450 Dyskutant (8,700 p.)
wybrane 17 maja 2015 przez Nasos
 
Najlepsza
Sprawą jest to że gra musi ładować się bez reakcji gracza, podałeś kawałek switcha, który odpowiada za poruszanie się, ale to jest dość mało, a powinieneś podać tak bez ucinków.
komentarz 15 maja 2015 przez Nasos Bywalec (2,730 p.)

Większość to logika gry, ale może jeszcze te wycinki kodu mają z tym jakiś związek, za dużo tego żeby to tutaj wszystko wklejać. Jeśli masz jakieś przypuszczenia to naprowadz mnie na odpowiednią część kodu. Ale cała reszta już chyba nie ma związku z tym problemem.

void Window::UpdateWindow()
{
	SDL_RenderClear(renderer);
	SDL_RenderCopy(renderer, champTxt, &champdRct, &champRct);
	SDL_RenderCopy(renderer, treeTxt, NULL, &treeRct);
	SDL_RenderPresent(renderer);
}

window = SDL_CreateWindow("Gra", 100, 100, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_PRESENTVSYNC);
mainEvent = new SDL_Event;
SDL_PollEvent(mainEvent);

int main(int argc, char * args[])
{
	Window okno;
	Standing Direction = South;
	bool quit=false;
	while (!quit)

 

komentarz 16 maja 2015 przez Mister123450 Dyskutant (8,700 p.)
https://www.libsdl.org/release/SDL-1.2.15/docs/html/guideinputkeyboard.html

Drugi przykładowy kod podaje info o naciśniętym klawiszu i reaguje on bez czekania na event, po prostu pętla idzie, a event może, lub nie się wydarzyć.
komentarz 17 maja 2015 przez Nasos Bywalec (2,730 p.)

To jest dla starej wersji SDL, to już nie chce działać w ten sposób z SDL2, problem tkwi w linijce

SDL_WaitEvent(&okno.kbdEvent);

Jeśli je usunę to pętla wykonuje się poprawnie, ale wtedy nie działa poruszanie się, czy da się to w jakiś inny sposób zapisać? W tamtym przykładzie tego w ogóle nie ma, ale w SDL2 bez tego to nie działa. Coś innego może być przyczyną? Bo w tutorialach na yt ludzie mają to zapisane w praktycznie taki sam sposób jak ja a działa im to normalnie.

 

Podobne pytania

+1 głos
3 odpowiedzi 402 wizyt
pytanie zadane 16 marca 2016 w C i C++ przez Gandalf Obywatel (1,260 p.)
0 głosów
0 odpowiedzi 445 wizyt
pytanie zadane 8 kwietnia 2022 w C i C++ przez kubekszklany Gaduła (3,190 p.)
0 głosów
0 odpowiedzi 179 wizyt
pytanie zadane 18 czerwca 2017 w C i C++ przez shout123131 Nowicjusz (120 p.)

92,579 zapytań

141,427 odpowiedzi

319,653 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...