01/10/2018, 15:21

Không load được image trong SDL2

mỗi bước mình đều để printf để kiểm tra quá trình chạy, k hề có lỗi nhưng mà khi run exe thì lại k lên hình

quá mệt mỏi với cái này ai giúp e với.

[code]bool loadMedia()
{
//Loading success flag
bool success = true;

//Load PNG texture
g_texture = loadTexture("main_bg.png");
if( g_texture == NULL )
{
	printf( "Failed to load texture image!
" );
	success = false;
}
printf("load img xong! 
");
return success;

}[/code]

link tut: http://lazyfoo.net/tutorials/SDL/07_texture_loading_and_rendering/index.php

Aragami1408 viết 17:23 ngày 01/10/2018

Bạn thử xem cái này nhé!

stackoverflow.com
Deni

SDL2/C++ could not load image

c++, sdl
asked by Deni on 10:48PM - 29 Mar 15
Trâu Gia Gia viết 17:34 ngày 01/10/2018

ảnh vẫn k load đươc, vẫn window trắng phau

viết 17:25 ngày 01/10/2018

có vẽ cái ảnh lên window chưa?

có gọi render present chưa?

hàm loadTexture() đâu?

các dòng lệnh vẽ đâu?

Trâu Gia Gia viết 17:34 ngày 01/10/2018
        SDL_RenderClear( g_renderer );


        SDL_RenderCopy( g_renderer, g_texture, NULL, NULL );


        SDL_RenderPresent( g_renderer );

        SDL_Delay(5000);[/code]

có rồi bạn

viết 17:34 ngày 01/10/2018

copy toàn bộ cái main.cpp lên luôn đi

Trâu Gia Gia viết 17:30 ngày 01/10/2018

here you are

[code]#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include “commonFunc.h”

int main(int argc, char* args[])
{
if(!Init())
{
printf(“can’t initialize \n”);

}
else
{

    if( !loadMedia() )
    {
        printf("can't load backgroud");
    }
    else
    {

        SDL_RenderClear( g_renderer );


        SDL_RenderCopy( g_renderer, g_texture, NULL, NULL );


        SDL_RenderPresent( g_renderer );

        SDL_Delay(5000);
    }
}
Close();
return 0;

}
[/code]

viết 17:32 ngày 01/10/2018

luôn mấy cái commonFunc.h .cpp gì luôn đi, để xem g_renderer nó khởi tạo ra sao. Mà main ko có main loop while (!quit) gì đó à? Qua phần Lesson 03 Event Driven Programming rồi mà sao ko thấy main loop đâu cả

Trâu Gia Gia viết 17:26 ngày 01/10/2018

ko, mình test cái render ảnh là chủ yếu nên k dùng loop.

viết 17:33 ngày 01/10/2018

bạn thử xóa chữ static trong mấy cái biến global g_ coi, và gộp chung tất cả thành 1 file. common.h trước rồi tới common.cpp rồi sau cùng là main.cpp, gộp thành 1 file.

nếu muốn tách 1 file thành 3 files thì cái bạn muốn là xài extern cho mấy biến này. Global variables fuck tạp lắm.

sửa

static SDL_Window *g_window = NULL;
static SDL_Renderer *g_renderer = NULL;
static SDL_Texture *g_texture = NULL;

thành

extern SDL_Window *g_window;
extern SDL_Renderer *g_renderer;
extern SDL_Texture *g_texture;

và trong main.cpp thêm

SDL_Window *g_window = NULL;
SDL_Renderer *g_renderer = NULL;
SDL_Texture *g_texture = NULL;

thấy rối quá hả? extern là gì, static tại sao ko xài được? Câu trả lời là đừng xài global variables =)

Trâu Gia Gia viết 17:24 ngày 01/10/2018

cái chính là mình chia nhỏ file ra để làm game mà, để 1 file, works fine

viết 17:37 ngày 01/10/2018

vậy là đúng nó rồi, static global variables mỗi file cpp sẽ tự tạo 1 cái riêng, ko phải chơi chung. Vì vậy phải xài extern, và chỉ khai báo mấy biến này ở 1 file cpp nào đó thôi, ở đây là khai báo ở main.cpp, common.cpp vì ghi là extern ... sẽ xài 3 biến external (bên ngoài common.cpp) này.

Trâu Gia Gia viết 17:27 ngày 01/10/2018

SDL_Window *g_window = NULL;
SDL_Renderer *g_renderer = NULL;
SDL_Texture *g_texture = NULL;

fu*k, được rồi, thanks sir. Chắc phải học lại mấy cái biến biến này :(.

viết 17:34 ngày 01/10/2018

khổ dâm vài tuần nữa cho biết SDL2 đi rồi về với đội SFML =)

Trâu Gia Gia viết 17:25 ngày 01/10/2018

SFML

mình đang học cái này trên lớp hí hí

Trâu Gia Gia viết 17:36 ngày 01/10/2018

thật ra mình chưa hiểu rõ cái header này lắm, nhưng gì cần khai báo trong .h và trong .cpp mình chưa rõ. bạn hiểu rõ giải thích cho mình được k

viết 17:30 ngày 01/10/2018

đừng khai báo biến global trong file .h, vậy thôi @_@ Hằng số global thì tạm được.

Trâu Gia Gia viết 17:26 ngày 01/10/2018

k y mình là nên khai báo cái thư viện (include) như thế nào ở file h và cpp

viết 17:23 ngày 01/10/2018

file nào cần thư viện gì thì include thư viện đó ở file đó. Hay include quẳng trong .cpp hết, thư viện nào .h cần thì để ở .h

Bài liên quan
0