我正在尝试编写自己的游戏,面对有趣的问题
班级巡洋舰有什么问题?它为什么不起作用? 请帮帮我 我真的读了很多这个
P.s:由于59,60,69,70等而无法编译 有错误:在“。”之前的预期primary-expression令牌
P.s:我用Google搜索了大约2天
#include <SDL.h>
#include <SDL_draw.h>
#include <SDL_ttf.h>
#include <cstdlib>
#include <time.h>
#include <SDL_image.h>
using namespace std;
class cruiser;
class level
{
public:
level(SDL_Surface *battleground)
{
screen = battleground;
SDL_Surface *background = SDL_LoadBMP("textures/phone.bmp");
SDL_BlitSurface(background,NULL,screen,NULL);
SDL_Flip(screen);
cruiser cruiser(SDL_Surface *screen);
//SDL_Delay(4000);
}
private:
SDL_Surface *screen;
friend cruiser;
};
int main(int argc, char *argv[])
{
SDL_Surface *screen;
if(SDL_Init(SDL_INIT_EVERYTHING)) //проверка на ошибку вывода SDL_init
{
fprintf(stderr,"Ошибка SDL: %s\n",SDL_GetError());
return 1;
}
atexit(SDL_Quit); //выход после успешного включения SDL_init
screen = SDL_SetVideoMode(1024,768,32,SDL_ANYFORMAT); //пока юзается ток разрешения формата 4:3, мб исправлю чё, но вроде норм
if(!screen)
{
fprintf(stderr,"Unable to set 1024x768 video: %s\n",SDL_GetError());
return 1;
}
// SDL_Quit();
level level(screen);
return 0;
}
class cruiser
{
public:
cruiser(SDL_Surface *screen)
{
SDL_Surface *battleship = IMG_Load("textures/battleship.png");
SDL_Rect dstrect;
SDL_Event event;
dstrect.x = 1024/2;
dstrect.y = 768/2;
SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
SDL_Flip(level.screen);
while(1)
{
if(SDL_PollEvent(&event))
{
if(event.key.keysym.sym==SDLK_LEFT&&dstrect.x>70)
{
dstrect.x-=5;
battleship = IMG_Load("textures/battleship.png");
SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
SDL_Flip(level.screen);
event.key.keysym.sym==NULL;
}
if(event.key.keysym.sym==SDLK_RIGHT&&dstrect.x<(1024-200))
{
dstrect.x+=5;
battleship = IMG_Load("textures/battleship.png");
SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
SDL_Flip(level.screen);
event.key.keysym.sym==NULL;
}
if(event.key.keysym.sym==SDLK_ESCAPE)
{
exit(0);
}
SDL_Delay(100);
battleship = IMG_Load("textures/battleship.png");
SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
SDL_Flip(level.screen);
}
}
}
//private:
//friend
};
答案 0 :(得分:0)
在班级的构造函数中
cruiser(SDL_Surface *screen)
您没有传递class level
的对象,并且在您尝试访问该类的非静态成员变量的构造函数中。 class cruiser
的构造函数应将class level
的对象作为输入参数。
应该是
cruiser(SDL_Surface *screen, level obj_level)
{
//your stuff
}
class level
的构造函数应该是
level(SDL_Surface *battleground)
{
//your stuff
cruiser cruiser(SDL_Surface *screen, *this);
}
希望这有帮助。
P.S:您的代码中存在各种设计缺陷,我不会在这里解决这些问题。