コンパイラ gcc + ライブラリ SDL , SDL_image
最近SDLを始めて、とりあえず画像のロードと適当に移動させてみようかと思って、一度メイン関数に全部書いて動いたので
関数化してみようかと思い、とりあえず画像のロードとか座標の初期化だけを分けてみようと試みたんですが、いざやってみると画像がロードされない・・・
ヒントやアドバイスなどを教えてくれると幸いです。
関数に渡してる型が問題なのかな〜とか思いながら試行錯誤したのですが、どうにも解決しないのでここで質問することにしました。
目的:画像のロードを関数化した状態ですること
以下ソース ※たまにコメントアウトしてるのは気にしない方針で
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <stdio.h>
int CheckEvent(SDL_Event event);
//int move(SDL_Rect *scr_rect , SDL_Event event);
void Init(SDL_Surface *image,SDL_Rect *rect,SDL_Rect *scr_rect)
{
//画像読み込み
image = IMG_Load("test.png");
if(image == NULL)
{
printf("画像がロードできていないようです");
} else {
printf("ロード完了");
}
// 画像の矩形情報設定
rect->x = 0;
rect->y = 0;
rect->w = image->w;
rect->h = image->h;
// 画像配置位置情報の設定
scr_rect->x = 0;
scr_rect->y = 0;
}
int main(int argc, char* argv[])
{
/************* 変数の宣言 ************/
SDL_Surface *image,*scr; //画像ハンドルとウィンドウ作成の変数
SDL_Rect rect, scr_rect, fsc = {0 ,0 ,640 ,480}; //画像位置情報
SDL_Event event;//eventk; //イベントの監視
int quit; //イベント結果の返り値
/***************ここまで**************/
Init(image,&rect,&scr_rect); //初期化に画像ハンドルと位置情報を渡す
SDL_Init(SDL_INIT_EVERYTHING); //SDL初期化処理
scr = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); //ウィンドウ作成
SDL_WM_SetCaption("ゆっくりがゆっくりうごくよ!", NULL); // タイトルを設定する
/*
image = IMG_Load("test.png");
// 画像の矩形情報設定
rect.x = 0;
rect.y = 0;
rect.w = image->w;
rect.h = image->h;
// 画像配置位置情報の設定
scr_rect.x = 0;
scr_rect.y = 0;
*/
while(1) //とりあえず無限ループ
{
// move(&scr_rect ,eventk);
if(scr_rect.x == 640) //いろいろ移動させる、
{
scr_rect.y = scr_rect.y + 1;
scr_rect.x = 0;
} else {
scr_rect.x = scr_rect.x + 2;
}
if(scr_rect.y > 480) scr_rect.y = 0; //画面したの端まで行ったら一番上に戻る
SDL_BlitSurface(image, &rect, scr, &scr_rect); //画像描画
SDL_Delay(16.66666f); //だいたい60FPSぶんぐらい待つ
SDL_Flip(scr); //表に出す
SDL_FillRect(scr, &fsc, SDL_MapRGB(scr->format, 0,0,0)); //画面のクリア
quit = CheckEvent(event);
if(quit) return 0;
}
SDL_FreeSurface(image); //画像の開放
SDL_Quit(); //終了処理
return 0;
}
int CheckEvent(SDL_Event event)
{
// すべてのイベントを処理する
while (SDL_PollEvent(&event))
{
// QUIT イベントが発生するか、ESC キーが押されたら終了する
if ((event.type == SDL_QUIT) ||
(event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_ESCAPE))
return 1;
}
return 0;
}
:追記:
エラーの表記を忘れていました、しかしエラーは出ていません、警告としてimageが初期化されていないと出ますが(てかこいつが原因だと思う
SDL.cpp:53:33: 警告: ‘image’ はこの関数内で初期化されずに使用されています [-Wuninitialized]