Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 22022

SDL2 ruch ukośny obiektu

$
0
0

Witam,

Przypominam sobie na nowo SDL2 i testuje jego poszczególne elementy. Otóż mam problem z diagonalnym poruszaniem obiektem. Ruch jest płynny, aż nadto....

Do obsługi klawiatury wykorzystuję SDL_GetKeyboardState(), flaga SDL_RENDERER_PRESENTVSYNC wyłączona, gdyż nie chcę przycinać FPS a ruch postaci i tak jest zależny od dt w ms. Poniżej zamieszczam główny kod i film obrazujący problem.

while (isRunning)
	{
		currentTime = SDL_GetTicks();
		deltaTime = (currentTime - lastTime);
		lastTime = currentTime;

		while (SDL_PollEvent(&mEvent))
		{
			if (mEvent.type == SDL_QUIT || mEvent.key.keysym.sym == SDLK_ESCAPE)
			{
				isRunning = false;
			}
		}

		keysState = SDL_GetKeyboardState(NULL);

		if (keysState[SDL_SCANCODE_UP])
		{
			mSprite->getPlayerRect()->y -= movementSpeed * deltaTime;
			//printf("X: %d | Y: %d\n", mSprite->getPlayerRect()->x, mSprite->getPlayerRect()->y);
			printf("speed*dt: %f * %f = %f\n", movementSpeed, deltaTime, movementSpeed*deltaTime);
		}

		if (keysState[SDL_SCANCODE_DOWN])
		{
			mSprite->getPlayerRect()->y += movementSpeed * deltaTime;
			//printf("X: %d | Y: %d\n", mSprite->getPlayerRect()->x, mSprite->getPlayerRect()->y);
			printf("speed*dt: %f * %f = %f\n", movementSpeed, deltaTime, movementSpeed*deltaTime);
		}

		if (keysState[SDL_SCANCODE_LEFT])
		{
			mSprite->getPlayerRect()->x -= movementSpeed * deltaTime;
			//printf("X: %d | Y: %d\n", mSprite->getPlayerRect()->x, mSprite->getPlayerRect()->y);
			printf("speed*dt: %f * %f = %f\n", movementSpeed, deltaTime, movementSpeed*deltaTime);
		}

		if (keysState[SDL_SCANCODE_RIGHT])
		{
			mSprite->getPlayerRect()->x += movementSpeed * deltaTime;
			//printf("X: %d | Y: %d\n", mSprite->getPlayerRect()->x, mSprite->getPlayerRect()->y);
			printf("speed*dt: %f * %f = %f\n", movementSpeed, deltaTime, movementSpeed*deltaTime);
		}

		frameTime += deltaTime;

		//odswiezanie animacji 4 razy na 1s
		if (frameTime >= 250.f)
		{
			//printf("%f\n", deltaTime);
			frameTime = 0;
			mSprite->setNextSpriteFrame();
		}

		mSprite->render();
		SDL_RenderPresent(mRenderer);

	}

 

https://youtu.be/U9KDVapWpfs


Viewing all articles
Browse latest Browse all 22022

Trending Articles