我有一个PNG图像,在Linux上我可以毫无问题地使用它。 但是,在Windows上,仅当我未指定目标矩形时才会绘制图像,所以
SDL_RenderCopy(m_pRenderer,m_pTexture,NULL,NULL);
将起作用,并且
SDL_RenderCopy(m_pRenderer,&m_Rect);
不起作用。
可复制的示例(即使代码实际上是相同的,它也可以工作)
#include <iostream>
#include <SDL.h>
#include <SDL_image.h>
using namespace std;
int main(int argc,char* argv[]) {
// Init SDL
SDL_Init(SDL_INIT_VIDEO);
// Create Window
SDL_Window* pWindow = SDL_CreateWindow("Example",SDL_WINDOWPOS_UNDEFINED,800,600,SDL_WINDOW_SHOWN);
// Check if the window creation was successfull
if (pWindow == NULL) {
SDL_DestroyWindow(pWindow);
SDL_Quit();
exit(1);
}
// Create Renderer
SDL_Renderer* pRenderer = SDL_CreateRenderer(pWindow,-1,NULL);
// Check if the renderer creation was successfull
if (pRenderer == NULL) {
SDL_DestroyRenderer(pRenderer);
SDL_DestroyWindow(pWindow);
SDL_Quit();
exit(1);
}
// Load the image
SDL_Texture* pTexture;
SDL_Surface* pTempSurface = IMG_Load("Data/Player-Standing.png");
// Check if image loading was successfull
if (pTempSurface == NULL) {
SDL_DestroyRenderer(pRenderer);
SDL_DestroyWindow(pWindow);
SDL_Quit();
exit(1);
}
// Init rect
SDL_Rect Rect;
Rect.x = 0;
Rect.y = 0;
Rect.w = pTempSurface->w;
Rect.h = pTempSurface->h;
pTexture = SDL_CreateTextureFromSurface(pRenderer,pTempSurface);
// Check if texture loading was successfull
if (pTexture == NULL) {
SDL_DestroyTexture(pTexture);
SDL_FreeSurface(pTempSurface);
SDL_DestroyRenderer(pRenderer);
SDL_DestroyWindow(pWindow);
SDL_Quit();
exit(1);
}
// clean up
SDL_FreeSurface(pTempSurface);
bool bRunning = true;
while (bRunning) {
SDL_Event Event;
SDL_PollEvent(&Event);
switch (Event.type) {
case SDL_QUIT:
bRunning = false;
break;
case SDL_KEYDOWN:
switch (Event.key.keysym.sym) {
case SDLK_ESCAPE:
bRunning = false;
break;
}
break;
}
// Clear the screen to black
SDL_SetRenderDrawColor(pRenderer,255); // Black
SDL_RenderClear(pRenderer);
// Rendering
SDL_RenderCopy(pRenderer,pTexture,&Rect); // SDL_RenderCopy(pRenderer,NULL); WORKS!!
// Render to screen
SDL_RenderPresent(pRenderer);
SDL_Delay(1000 / 60); // 60 FPS
}
// Clean up
SDL_DestroyTexture(pTexture);
SDL_DestroyRenderer(pRenderer);
SDL_DestroyWindow(pWindow);
SDL_Quit();
}
这个例子对我有用。代码几乎相同,但是我更改了变量名并删除了
Time = SDL_GetTicks();
Elapsed = Time / 1000;
LastTime = Time;
我不知道为什么这样