C ++ 및 SDL 텍스처가로드되지 않지만 SDL_GetError ()는 아무것도 반환하지 않습니다.

user3450456

정말 이상한 것을 발견했을 때 SDL2에서 놀았습니다. 최적화 된 텍스처를 그리려고하는데 작동하지 않습니다. 표면을 텍스처로 바꾸는 코드가 작동하지 않습니다. 문서에 따르면 SDL_GetError ()는 나에게 오류를 제공해야하지만 아무것도 반환하지 않습니다 ... 어떤 도움을 주시면 감사하겠습니다! 코드는 다음과 같습니다.

Main.cpp :

#include "SDLHelper.h"
#include "Player.h"

#define WIDTH 640
#define HEIGHT 480
#define NAME "TILES BOI!"

int main(int args, char* argv[]){
    SDL_Window* gWindow;
    SDL_Renderer* gRenderer;
    if(!init(NAME, WIDTH, HEIGHT, &gWindow, &gRenderer)){
        printf("Failed to initialize!\n");
    }else{
            bool quit = false;
            SDL_Event e;
            Player* player = new Player(100, 100, 0, 0);
            player->texture = loadTexture("sprites/people/male_walkcycle.png", &gRenderer);
        while(!quit){
            while(SDL_PollEvent(&e) != 0){
                if(e.type == SDL_QUIT){
                        quit = true;
                }
            }

            SDL_RenderClear(gRenderer);

            SDL_RenderCopy(gRenderer, player->texture, &(player->currentTexturePos), &(player->position));

            SDL_RenderPresent(gRenderer);
        }
        close(&gWindow, &gRenderer);
    }

    return 0;
}

SDLHelper.h :

 #ifndef SDLHELPER_H
  #define SDLHELPER_H

  #include <SDL2/SDL.h>
  #include <SDL2/SDL_image.h>
  #include <stdio.h>

  bool init(const char* name, int width, int height, SDL_Window** window, SDL_Renderer** renderer);
  SDL_Texture* loadTexture(const char* path, SDL_Renderer** renderer);
    void close(SDL_Window** gWindow, SDL_Renderer** gRenderer);

    #endif

SDLHelper.cpp :

#include "SDLHelper.h"

bool init(const char* name, int width, int height, SDL_Window** window, SDL_Renderer** renderer){
    bool success = true;
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0){
        printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError());
        success = false;
    }else{
        if(!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")){
            printf("Warning: Linear texture filtering is not enabled!\n");
        }

        *window = SDL_CreateWindow(name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN);
        if(*window == NULL){
            printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
            success = false;
        }else{
            *renderer = SDL_CreateRenderer(*window, -1, SDL_RENDERER_ACCELERATED);
            if(*renderer == NULL){
                printf("Renderer could not be created! SDL Error: %s\n", SDL_GetError());
                success = false;
            }else{
                SDL_SetRenderDrawColor(*renderer, 0xFF, 0xFF, 0xFF, 0xFF);
                int imgFlags = IMG_INIT_PNG;
                if(!(IMG_Init(imgFlags) & imgFlags)){
                    printf("SDL_Image could not initialize! SDL_Image Error: %s\n",IMG_GetError());
                    success = false;
                }
            }
        }
    }
    return success;
}

SDL_Texture* loadTexture(const char* path, SDL_Renderer** renderer){
    SDL_Texture* newTexture = NULL;
    SDL_Surface* loaded = IMG_Load(path);
    if(loaded == NULL){
        printf("Unable to load image %s! SDL_Image Error: %s\n", path, IMG_GetError());
    }else{
        newTexture == SDL_CreateTextureFromSurface(*renderer, loaded);
        if(newTexture == NULL){
            printf("Unable to create texture from %s! SDL Error: %s\n", path, SDL_GetError());
        }
        SDL_FreeSurface(loaded);
    }

    return newTexture;
}

void close(SDL_Window** gWindow, SDL_Renderer** gRenderer){
    SDL_DestroyRenderer(*gRenderer);
    SDL_DestroyWindow(*gWindow);
    *gWindow = NULL;
    *gRenderer = NULL;

    //Quit SDL subsystems
    IMG_Quit();
    SDL_Quit();
}

Player.h :

#ifndef PLAYER_H
#define PLAYER_H

#include <SDL2/SDL.h>

class Player
{
public:
    Player(int h, int m, int x, int y);
    ~Player();
    SDL_Texture* texture;
    SDL_Rect position;
    SDL_Rect currentTexturePos;
    int health;
    int mana;
    const char* name = "Bobby";
};
#endif

Player.cpp :

#include "Player.h"

Player::Player(int h, int m, int x, int y){
    health = h;
    mana = m;
    position.x = x;
    position.y = y;
    position.h = 64;
    position.w = 64;
    currentTexturePos.x = 64;
    currentTexturePos.y = 0;
    currentTexturePos.h = 64;
    currentTexturePos.w = 64;
}

Player::~Player(){
    SDL_DestroyTexture(texture);
    texture = NULL;
}

Makefile :

CC = g++
FLAGS = -w -lSDL2 -lSDL2_image
OBJECTS = main.cpp SDLHelper.cpp Player.cpp
NAME = tileBasedRPG

all: $(OBJECTS)
    $(CC) $(OBJECTS) $(FLAGS) -o $(NAME)

clean:
    rm -rf *.o
켈 타르

할당 한 적이 없음 newTexture:

newTexture == SDL_CreateTextureFromSurface(*renderer, loaded);

그것이 의미했을 때

newTexture = SDL_CreateTextureFromSurface(*renderer, loaded);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SDL PollEvent ()는 아무것도 반환하지 않습니다.

분류에서Dev

Javascript For 루프 및 함수는 아무것도 반환하지 않습니다.

분류에서Dev

코드는 아무것도 반환하지 않습니다.

분류에서Dev

stbi_load ()는 아무것도 반환하지 않지만 null을 반환하지 않습니다.

분류에서Dev

Laravel 관계는 아무것도 반환하지 않습니다.

분류에서Dev

React 함수는 아무것도 반환하지 않습니다.

분류에서Dev

htmlentities ()는 아무것도 반환하지 않습니다.

분류에서Dev

Laravel hasManyThrough는 아무것도 반환하지 않습니다.

분류에서Dev

fsharp 함수는 아무것도 반환하지 않습니다.

분류에서Dev

whereis는 아무것도 반환하지 않습니다.

분류에서Dev

System.lineSeparator ()는 아무것도 반환하지 않습니다.

분류에서Dev

Sulu Search는 아무것도 반환하지 않습니다.

분류에서Dev

getFullYear는 아무것도 반환하지 않습니다.

분류에서Dev

sudo_exec는 아무것도 반환하지 않습니다.

분류에서Dev

Perl getprint ()는 아무것도 반환하지 않습니다.

분류에서Dev

함수는 아무것도 반환하지 않습니다.

분류에서Dev

re.groups ()는 아무것도 반환하지 않습니다.

분류에서Dev

File :: copyDirectory는 아무것도 반환하지 않습니다.

분류에서Dev

Volley JSONObjectRequest는 아무것도 반환하지 않습니다.

분류에서Dev

PIL 및 BytesIO로 이미지를 표시하려고하지만 아무것도 반환하지 않습니다.

분류에서Dev

PIL 및 BytesIO로 이미지를 표시하려고하지만 아무것도 반환하지 않습니다.

분류에서Dev

SDL-창에 아무것도 표시되지 않음

분류에서Dev

c_str ()은 아무것도 반환하지 않지만 문자열은 비어 있지 않습니다.

분류에서Dev

false 만 반환하는 함수는 아무것도 반환하지 않습니다.

분류에서Dev

C ++ Libcurl curl_easy_getinfo는 CURLOPT_XFERINFOFUNCTION 함수에서 아무것도 반환하지 않습니다.

분류에서Dev

TTF_SizeText ()가 SDL2, C ++에서 'i' 'j'및 '1'(지금까지 발견됨)에 대한 올바른 값을 반환하지 않습니다.

분류에서Dev

MongoDB는 아무것도 반환하지 않습니까?

분류에서Dev

아무것도 반환하지 않는 파이프 라인 찾기 및 grep

분류에서Dev

Post 메소드는 항상 아무것도 반환하지 않습니다.

Related 관련 기사

  1. 1

    SDL PollEvent ()는 아무것도 반환하지 않습니다.

  2. 2

    Javascript For 루프 및 함수는 아무것도 반환하지 않습니다.

  3. 3

    코드는 아무것도 반환하지 않습니다.

  4. 4

    stbi_load ()는 아무것도 반환하지 않지만 null을 반환하지 않습니다.

  5. 5

    Laravel 관계는 아무것도 반환하지 않습니다.

  6. 6

    React 함수는 아무것도 반환하지 않습니다.

  7. 7

    htmlentities ()는 아무것도 반환하지 않습니다.

  8. 8

    Laravel hasManyThrough는 아무것도 반환하지 않습니다.

  9. 9

    fsharp 함수는 아무것도 반환하지 않습니다.

  10. 10

    whereis는 아무것도 반환하지 않습니다.

  11. 11

    System.lineSeparator ()는 아무것도 반환하지 않습니다.

  12. 12

    Sulu Search는 아무것도 반환하지 않습니다.

  13. 13

    getFullYear는 아무것도 반환하지 않습니다.

  14. 14

    sudo_exec는 아무것도 반환하지 않습니다.

  15. 15

    Perl getprint ()는 아무것도 반환하지 않습니다.

  16. 16

    함수는 아무것도 반환하지 않습니다.

  17. 17

    re.groups ()는 아무것도 반환하지 않습니다.

  18. 18

    File :: copyDirectory는 아무것도 반환하지 않습니다.

  19. 19

    Volley JSONObjectRequest는 아무것도 반환하지 않습니다.

  20. 20

    PIL 및 BytesIO로 이미지를 표시하려고하지만 아무것도 반환하지 않습니다.

  21. 21

    PIL 및 BytesIO로 이미지를 표시하려고하지만 아무것도 반환하지 않습니다.

  22. 22

    SDL-창에 아무것도 표시되지 않음

  23. 23

    c_str ()은 아무것도 반환하지 않지만 문자열은 비어 있지 않습니다.

  24. 24

    false 만 반환하는 함수는 아무것도 반환하지 않습니다.

  25. 25

    C ++ Libcurl curl_easy_getinfo는 CURLOPT_XFERINFOFUNCTION 함수에서 아무것도 반환하지 않습니다.

  26. 26

    TTF_SizeText ()가 SDL2, C ++에서 'i' 'j'및 '1'(지금까지 발견됨)에 대한 올바른 값을 반환하지 않습니다.

  27. 27

    MongoDB는 아무것도 반환하지 않습니까?

  28. 28

    아무것도 반환하지 않는 파이프 라인 찾기 및 grep

  29. 29

    Post 메소드는 항상 아무것도 반환하지 않습니다.

뜨겁다태그

보관