1
我的源代碼出現問題。基本上,我試圖在2D地圖SDL移動我的角色
,這裏是我的武士階層移動精靈性格:
class Warrior
{
private :
int HP, SP;
int xPos, yPos;
int status;
char *name;
SDL_Surface *warrior;
Map m;
public :
int atk, def, matk, mdef;
Warrior(int, int, int, Map);
int getHP();
bool isAlive();
int getSP();
int getX();
int getY();
void setX(int);
void setY(int);
void changeStatus(int);
void drawChar();
void move();
void deleteChar();
};
//constructor buat warrior
Warrior::Warrior(int pos, int x, int y, Map _m)
{
HP = 250;
SP = 50;
atk = 75;
def = 20;
matk = 15;
mdef = 5;
warrior = NULL;
m = _m;
status = pos;
xPos = x;
yPos = y;
}
bool Warrior::isAlive()
{
if (HP > 0) return true;
return false;
}
//buat ngilangin character warrior-nya...
//timpa ama sprite rumput di coord char-nya
void Warrior::deleteChar()
{
char path = '0';
m.drawTile(xPos, yPos, path);
m.drawTile(xPos, yPos+20, path);
SDL_Flip (SDL_SCREEN);
}
//buat gambar character
void Warrior::drawChar()
{
switch (status)
{
case WARRIOR_LEFT :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_LEFT.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_RIGHT :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_RIGHT.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_UP :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_UP.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_DOWN :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_DOWN.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_MOVE_LEFT :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_MOVE_LEFT.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
SDL_Flip(SDL_SCREEN);
SDL_Delay (100);
deleteChar();
status = WARRIOR_LEFT;
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_LEFT.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_MOVE_RIGHT :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_MOVE_RIGHT.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
SDL_Flip(SDL_SCREEN);
SDL_Delay (100);
deleteChar();
status = WARRIOR_RIGHT;
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_RIGHT.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_MOVE_UP :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_MOVE_UP.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
SDL_Flip(SDL_SCREEN);
SDL_Delay (100);
deleteChar();
status = WARRIOR_UP;
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_UP.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
case WARRIOR_MOVE_DOWN :
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_MOVE_DOWN.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
SDL_Flip(SDL_SCREEN);
SDL_Delay (100);
deleteChar();
status = WARRIOR_DOWN;
warrior = IMG_Load ("Sprites/Warrior/WARRIOR_DOWN.png");
applySurface (xPos, yPos, warrior, SDL_SCREEN);
break;
}
SDL_Flip(SDL_SCREEN);
}
int Warrior::getX()
{
return xPos;
}
int Warrior::getY()
{
return yPos;
}
void Warrior::setX(int x)
{
xPos = x;
}
void Warrior::setY(int y)
{
yPos = y;
}
int Warrior::getHP()
{
return HP;
}
int Warrior::getSP()
{
return SP;
}
void Warrior::changeStatus(int _status)
{
status = _status;
}
//jalannya karakter
void Warrior::move()
{
if (event.type == SDL_KEYDOWN)
{
//hilangkan char-nya dolo
deleteChar();
switch (event.key.keysym.sym)
{
case SDLK_UP :
// nge-cek collision dari coord peta-nya (Map m)
if (m.map[m.getLevel()][(yPos/20)-1][xPos] == '0')
{
yPos -= 20;
status = WARRIOR_MOVE_UP;
}
break;
case SDLK_DOWN :
if (m.map[m.getLevel()][(yPos/20)+1][xPos/20] == '0')
{
yPos += 20;
status = WARRIOR_MOVE_DOWN;
}
case SDLK_LEFT :
if (m.map[m.getLevel()][yPos/20][(xPos/20)-1] == '0')
{
xPos -= 20;
status = WARRIOR_MOVE_LEFT;
}
case SDLK_RIGHT :
if (m.map[m.getLevel()][yPos/20][(xPos/20)+1] == '0')
{
xPos += 20;
status = WARRIOR_MOVE_RIGHT;
}
}
//bru di-gambar
drawChar();
SDL_Delay (100);
}
}
的問題是我不能移動它,程序完全沒有響應......我已經檢查過所有的精靈圖像,它工作正常。