В настоящее время я по сути воссоздаю оригинал Марио для задания.Я настроил его так, чтобы игра использовала ScreenManager и в настоящее время по умолчанию загружает Level1 при запуске.Затем Level1 загружает фон и персонажа, используя класс Texture2D, который я создал ранее.Если один из них загружен, а другой закомментирован, то они отображаются на экране нормально и выглядят нормально, однако, если я отображаю их обоих на экране, он начинает непрерывно мерцать.
Level1 Render () Функция:
void GameScreenLevel1::Render()
{
mBackgroundTexture->Render(Vector2D(), SDL_FLIP_NONE);
myCharacter->Render();
}
Texture2D Класс:
#include <iostream>
#include <SDL_image.h>
#include "Texture2D.h"
using namespace::std;
Texture2D::Texture2D(SDL_Renderer* renderer)
{
mRenderer = renderer;
SDL_Texture* mTexture = NULL;
SDL_Texture* vTexture = NULL;
int mWidth = 0;
int mHeight = 0;
}
Texture2D::~Texture2D()
{
Free();
mRenderer = NULL;
}
bool Texture2D::LoadFromFile(string path)
{
Free();
//Loadtheimage
SDL_Surface* pSurface = IMG_Load(path.c_str());
if (pSurface != NULL)
{
SDL_SetColorKey(pSurface, SDL_TRUE, SDL_MapRGB(pSurface->format, 0, 0xFF, 0xFF));
mTexture = SDL_CreateTextureFromSurface(mRenderer, pSurface);
if (mTexture == NULL)
{
cout << "Unable to create texture from surface. Error:" << SDL_GetError() << endl;
}
else
{
mWidth = pSurface->w;
mHeight = pSurface->h;
}
}
else
{
cout << "Unable to create texture from surface. Error: " << IMG_GetError() << endl;
}
//vTexture = mTexture;
return mTexture != NULL;
}
void Texture2D::Render(Vector2D newPosition, SDL_RendererFlip flip, double angle)
{
//clear the screen
SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0x00);
SDL_RenderClear(mRenderer);
//set where to render the texture
SDL_Rect renderLocation = {newPosition.x, newPosition.y, mWidth, mHeight};
//render to screen
SDL_RenderCopyEx(mRenderer, mTexture, NULL, &renderLocation, 0, NULL, flip);
SDL_RenderPresent(mRenderer);
}
void Texture2D::Free()
{
if (mTexture != NULL)
{
SDL_DestroyTexture(mTexture);
mTexture = NULL;
SDL_DestroyTexture(vTexture);
vTexture = NULL;
mHeight = 0;
mWidth = 0;
}
}
Мне кажется, что код улавливается при очистке экрана и рендеринг текстурСнова и снова каждый кадр вызывает мерцание и из-за наличия нескольких текстур на экране замедляет процесс до такой степени, что он становится видимым, но я не уверен, как исправить проблему.