0

何らかの理由で、SDLは画像のレンダリングを拒否します。理由はわかりませんが、開発中の2Dゲームの進行状況が大幅に低下しています。すべてが適切にリンクされているなど。これが私のコードです:

//main.cpp
#include "main.h"

void game::createWindow(const int SCREEN_W, const int SCREEN_H, const char* SCREEN_NAME)
{
 buffer = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 0, NULL);
 SDL_WM_SetCaption(SCREEN_NAME, NULL);
}

void game::enterLoop()
{
 while(Running == true)
 {
  SDL_BlitSurface(zombie, NULL, buffer, NULL);
  SDL_Flip(buffer);

  while(SDL_PollEvent(&gameEvent))
  {
   if(gameEvent.type == SDL_QUIT)
   {
    Running = false;
   }
  }
 }
}

void game::loadContent()
{
 zombie = SDL_LoadBMP("zombie.bmp");
}

int main(int argc, char* argv[])
{
 game gameObj;

 SDL_Init(SDL_INIT_EVERYTHING);
 gameObj.createWindow(960, 600, "uShootZombies");
 gameObj.loadContent();
 gameObj.enterLoop();

 SDL_Quit();

 return 0;
}

//main.h
#include <SDL.h>
#include <fstream>
#include <string>

using namespace std;

class game
{
 public:
 void createWindow(const int SCREEN_W, const int SCREEN_H, const char* SCREEN_NAME);
 void enterLoop();
 void loadContent();

 game()
 {
  Running = true;
 }

 ~game()
 {
  SDL_FreeSurface(buffer);

  SDL_FreeSurface(background);
  SDL_FreeSurface(player);
  SDL_FreeSurface(zombie);
 }

 private:
 SDL_Surface* buffer;

 SDL_Surface* background;
 SDL_Surface* player;
 SDL_Surface* zombie;

 SDL_Event gameEvent;
 bool Running;
};NU
4

2 に答える 2

1

code::blocksで使用するためにすべてのコードをコピーしました。正常に動作します。もちろん、「zombie.bmp」という名前の自分の.bmpファイルを使用していました。

.bmpファイルに問題はありませんか?

最初に.jpegファイルなどとして保存し、名前を.bmpに変更しただけでは、機能しないことに注意してください(エラーもスローされません)。

元々はbmpとして保存する必要があります。

それが私が考えることができるすべてです。

于 2010-11-12T09:28:00.443 に答える
0

Sour Lemonはすでに問題を解決しているようですが、上記のコードはゾンビ画像が実際に正しく読み込まれたことを確認するためのチェックを実行しないことを指摘する価値があると思います。

次のようなことをする必要があります。

void game::loadContent()
{
    zombie = SDL_LoadBMP("zombie.bmp");
    if (zombie == NULL) {
        ReportError(SDL_GetError());
    }
}
于 2010-11-23T23:48:52.940 に答える