SDL_RencerCopy();在Windows上无法运行

我有一个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;

我不知道为什么这样

h8621007 回答:SDL_RencerCopy();在Windows上无法运行

问题实际上不是SDL_RenderCopy(..);函数,但那是我每帧用两个浮点数(m_fXPos,m_fYPos)更新了精灵位置,但从未分配任何值。 永远不要忘记定义变量,然后再使用它们:P

本文链接:https://www.f2er.com/3037472.html

大家都在问