Boa tarde pessoal, eu to fazendo o curso de sistemas de informação com enfoque em jogos, gostaria de saber se alguem ai tem alguma função bool pra quando o personagem sai da tela tocar uma musica de alerta,um som, tanto quanto ele sai pra x de ambos os lados e pra y de ambos os lados, se precisarem do codigo completo do esboço do jogo é só pedirem que posto aqui se for facilitar, desde ja agradeço, obrigado.
imagine um quadrado…
esse quadrado tem tamanho 50x50, quando criado ele esta no na posicao 0x0…
imaginando que a tela que envolve esse quadrado tem tamanho 1000 x 1000
quando esse quadrado atingir as bordas dessa ela ele deve parar e fazer a alerta.
temos então algumas váriaveis nesse quadrado…
[code]int posicao_X;
int tamanho_X;
bem vamos fazer a colisões:
void movimentar(char btn){
if(btn == ‘D’){
// verifica se o objeto encostou no lado direito
if(posicao_X + tamanho_X +1 <= 1000){
posicao_X += 1; //aqui o objeto iria para a direita, pois nao irá ocorrer colisão
//aqui você redesenha a tela
}else
{
//realiza o alert bem aqui, pois o objeto colidiu
}
}
//agora é só continuar a função,
// if(btn == ‘S’) {// incrementa a posicao_Y }
// if(btn == ‘W’) {//decrementa a posicao_Y }
// if(btn == ‘A’) {//decrementa a posicao_X }
[/code]
é isso agora falta aplicar na linguagem desejada
E a gente precisa pedir o código :?: O mínimo que você deve fazer é postá-lo.
pra redesenhar a imagem é só dar um enjin->drawimage né?
Desculpe, só via agora que você pediu o codigo, agora não posso postá-lo por que estou no estagio, mas a tarde, umas 16:30 eu posto ele aqui mesmo.
Oi. Tópicos sobre C++ devem ser postado no fórum de outras linguagens. Vou mover esse tópico.
Fica muito difícil te explicar como fazer isso, se você não disser que biblioteca está usando para desenhar imagens. Em C++, existem várias bibliotecas possíveis: Allegro, SDL, OpenGL, DirectX, Cocos-x…
Bibliotecas tratam diferentemente o ponto de pivô do seu personagem. Por exemplo, no caso da SDL e da Allegro o ponto (0,0) de uma figura é o canto superior esquerdo. No caso da OpenGL o ponto (0,0) da figura é o centro da imagem. Isso tem impacto direto na fórmula que você quer, então, seria bom que você nos dissesse isso também.
Depende o que é enjin? É uma classe sua, da engine do jogo?
E que outras funções essa classe teria?
[quote=entanglement]Enjin deve ser este Enjin ( 炎人 ) aqui:
http://en.wikipedia.org/wiki/Ifrit:_Danzai_no_Enjin
[/quote]
Pois é, eu tô ficando véio mesmo. Perdi essa onda de anime. Também, na minha época, o melhor que passava na TV desse tipo de desenho era Honey Honey:
[quote=ViniGodoy][quote=entanglement]Enjin deve ser este Enjin ( 炎人 ) aqui:
http://en.wikipedia.org/wiki/Ifrit:_Danzai_no_Enjin
[/quote]
Pois é, eu tô ficando véio mesmo. Perdi essa onda de anime. Também, na minha época, o melhor que passava na TV desse tipo de desenho era Honey Honey:
[/quote]
leva a mal não, mas esse aí no brasil não era exibido como “favo de mel” e aquele sujeito mascarado conhecido como sei que lá mask?
[quote=ViniGodoy][quote=entanglement]Enjin deve ser este Enjin ( 炎人 ) aqui:
http://en.wikipedia.org/wiki/Ifrit:_Danzai_no_Enjin
[/quote]
Pois é, eu tô ficando véio mesmo. Perdi essa onda de anime. Também, na minha época, o melhor que passava na TV desse tipo de desenho era Honey Honey:
[/quote]
E eu então? Agora é que peguei a mania de ler mangás.
Uma coisa estapafúrdia é que justamente fiquei com a mania de ler aqueles romances adolescentes, do tipo Kimi no iru Machi:
Provavelmente você, que é um pouco mais velho, vai achar este melhor:
Bom, eu tenho 33 e tive a honra de ter assisti Don Dracula, AstroBoy, Pirata do Espaço e Space BattleShip Yamato em animações.
Bom até que enfim consegui entra pra posta o codigo, enjin seria o motor do jogo.
Codigo principal (main) :
#include “Globals.h”
#include “Enjin.h”
#define DOWN 0
#define RIGHT 1
#define UP 2
#define LEFT 3
#define STOP -1
#define SPEED 10
class Game {
Enjin *enjin;
Image *background;
Image *menina[4][4], *arvore[1][1], *carro[4][4];
Music *music;
Sound *sound[2];
Font *fontFivecent;
bool exitGame;
int x, y;//posição do boneco
uint step;
uint direction;
bool saiuTela;
private:
public:
Game();
void render();
void simulateGameWorld();
void processInput();
void gameLoop();
~Game();
};
Game::Game() {
enjin = new Enjin();//constructor,inicializa o motor
enjin->set(“Exercicio de fixacao de aprendizado!”, 1300, 700);//titulo da janela
menina[0][0] = enjin->loadImage("../../midia/img/menina1.png");//vetor de posicionamento do avataravatar
menina[0][1] = enjin->loadImage("../../midia/img/menina2.png");
menina[0][2] = enjin->loadImage("../../midia/img/menina3.png");
menina[0][3] = enjin->loadImage("../../midia/img/menina4.png");
menina[1][0] = enjin->loadImage("../../midia/img/menina9.png");
menina[1][1] = enjin->loadImage("../../midia/img/menina10.png");
menina[1][2] = enjin->loadImage("../../midia/img/menina11.png");
menina[1][3] = enjin->loadImage("../../midia/img/menina12.png");
menina[2][0] = enjin->loadImage("../../midia/img/menina13.png");
menina[2][1] = enjin->loadImage("../../midia/img/menina14.png");
menina[2][2] = enjin->loadImage("../../midia/img/menina15.png");
menina[2][3] = enjin->loadImage("../../midia/img/menina16.png");
menina[3][0] = enjin->loadImage("../../midia/img/menina5.png");
menina[3][1] = enjin->loadImage("../../midia/img/menina6.png");
menina[3][2] = enjin->loadImage("../../midia/img/menina7.png");
menina[3][3] = enjin->loadImage("../../midia/img/menina8.png");
arvore [0] [0] = enjin->loadImage ("../../midia/img/arvore.png");
carro [0] [0] = enjin->loadImage ("../../midia/img/carro1.png");
carro [1] [1] = enjin->loadImage ("../../midia/img/carro2.png");
carro [2] [2] = enjin->loadImage ("../../midia/img/carro3.png");
carro [3] [3] = enjin->loadImage ("../../midia/img/carro4.png");
background = enjin->loadImage("../../midia/img/rua.jpg");//fundo, muito importante casesesitive
/*music = enjin->loadMusic("../../midia/audio/international_love.wav");// ler aquivo de musica
enjin->playMusic(music, 1000);//toca a musica*/
sound[0] = enjin->loadSound("../../midia/audio/Basso.wav");//array de som
sound[1] = enjin->loadSound("../../midia/audio/Glass.wav");
fontFivecent = enjin->loadFont("../../midia/fonte/fivecent.ttf", 25);// ler ttf
exitGame = false;// nao e pra sair do jogo
x = +560;//posição inicial
y = 0;
step = 0;//nao entendi a diferença de step e direction
direction = 0;
gameLoop();//chama game loop que vai renderiza e executa as ações
}
void Game::render() {//pega a nossa folha e começa a colocar os elementos
enjin->drawImage(background, enjin->screen, 0, 0, 255);//desenhar uma imagem, desenha na screen da engine
SDL_Color fg = enjin->color(0, 0, 0);//cria duas cores, que tem que ser declaradas antes de serem usadas
SDL_Color bg = enjin->color(255, 0, 255);
enjin->drawText(“Primeiro exercicio de fixacao de aprendizado”, enjin->screen, fontFivecent, 0, 0, &fg, &bg);//dizer o que queremos desenhar e onde queremos desenhar
enjin->drawImage(menina[direction][step], enjin->screen, x, y, 500);//criou uma variavel chamada direction, dizendo que esta pra baixo, dizer aonde quer desenhar o personagem
enjin->drawImage(arvore[0][0], enjin->screen, 0, 100, 500 ); //os dois primeiros valores são o posicionamento, o ultimo valor é o grau de invisibilidade
enjin->drawImage(arvore[0][0], enjin->screen, 110, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 220, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 330, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 700, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 800, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 900, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1000, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1100, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1200, 100, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 0, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 110, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 220, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 330, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 700, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 800, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 900, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1000, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1100, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1200, 400, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 0, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 110, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 220, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 330, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 700, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 800, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 900, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1000, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1100, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1200, 500, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 0, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 110, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 220, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 330, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 700, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 800, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 900, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1000, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1100, 600, 500 );
enjin->drawImage(arvore[0][0], enjin->screen, 1200, 600, 500 );
enjin->drawImage(carro[0][0], enjin->screen, 0, 220, 500 );
enjin->drawImage(carro[0][0], enjin->screen, 200, 220, 500 );
enjin->drawImage(carro[0][0], enjin->screen, 450, 220, 500 );
enjin->drawImage(carro[0][0], enjin->screen, 800, 220, 500 );
enjin->drawImage(carro[0][0], enjin->screen, 1000, 220, 500 );
enjin->drawImage(carro[0][0], enjin->screen, 1200, 220, 500 );
enjin->drawImage(carro[1][1], enjin->screen, 0, 300, 500 );
enjin->drawImage(carro[1][1], enjin->screen, 200, 300, 500 );
enjin->drawImage(carro[1][1], enjin->screen, 450, 300, 500 );
enjin->drawImage(carro[1][1], enjin->screen, 800, 300, 500 );
enjin->drawImage(carro[1][1], enjin->screen, 1000, 300, 500 );
enjin->drawImage(carro[1][1], enjin->screen, 1200, 300, 500 );
enjin->drawImage(carro[2][2], enjin->screen, 450, 0, 500 );
enjin->drawImage(carro[2][2], enjin->screen, 450, 500, 500 );
enjin->drawImage(carro[2][2], enjin->screen, 450, 600, 500 );
enjin->drawImage(carro[3][3], enjin->screen, 600, 210, 500 );
enjin->drawImage(carro[3][3], enjin->screen, 600, 500, 500 );
enjin->drawImage(carro[3][3], enjin->screen, 600, 600, 500 );
enjin->drawScreen();
}
void Game::simulateGameWorld() {
bool moved = false;//boneco nao se moveu
if (enjin->isKeyDown(SDLK_ESCAPE)) {
exitGame = true;// se apertar esc a tela sai do jogo
} else if (enjin->isKeyHeld(SDLK_UP)) {
y -= 10;
direction = UP;
moved = true;
} else if (enjin->isKeyHeld(SDLK_DOWN)) {
y += 10;
direction = DOWN;
moved = true;
} else if (enjin->isKeyHeld(SDLK_LEFT)) {
x -= 10;
direction = LEFT;
moved = true;
} else if (enjin->isKeyHeld(SDLK_RIGHT)) {
x += 10;
direction = RIGHT;
moved = true;
}
if (enjin->isKeyDown(SDLK_a)) {//se apertar a toca som 0 se apertar s toca som 1
enjin->playSound(sound[0], 0);
} else if (enjin->isKeyDown(SDLK_s)) {
enjin->playSound(sound[1], 1);
}
if (moved) {
step = (step == 0) ? 1 : 0;
}
enjin->delay(25);//velocidade com que o char se move
}
void Game::processInput() {//utiliza o update do motor
enjin->updateEvents();
}
void Game::gameLoop() {// enquanto a variavel booleana for falsa fazer…
while (!exitGame) {
render();
processInput();
simulateGameWorld();
}
}
Game::~Game() {
delete enjin;
}
int main(int argc, char* argv[]) {
Game game;
return 0;
}
o codigo do enjim é esse?
#include “Enjin.h”
Enjin::Enjin() {
cout << “Init Enjin…”;
Uint32 flags = SDL_DOUBLEBUF | SDL_SWSURFACE; // | SDL_FULLSCREEN;
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
cerr << “[FAIL]: SDL start: " << SDL_GetError() << endl;
return;
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(800, 600, 32, flags);
if (screen == NULL) {
cerr << “[FAIL] Video mode settings: " << SDL_GetError() << endl;
SDL_Quit();
return;
}
SDL_WM_SetCaption(””, NULL);
cout << “[OK]” << endl;
cout << "Init Mixer...";
soundVolume = 128;
musicVolume = 128;
int audio_rate = 22050;
Uint16 audio_format = AUDIO_S16;
int audio_channels = 2;
int audio_buffers = 4096;
SDL_Init(SDL_INIT_AUDIO);
if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) {
cerr << "[FAIL] Unable to open audio..." << endl;
SDL_Quit();
return;
}
cout << " [OK]" << endl;
cout << "Init ttf...";
if (TTF_Init() == -1) {
cout << "[FAIL] Unable to start SDL_ttf: " << TTF_GetError() << endl;
} else {
cout << " [OK]" << endl;
}
cout << "Init Joystick...";
if (SDL_Init(SDL_INIT_JOYSTICK) < 0) {
cout << "[FAIL] unable to init SDL: " << SDL_GetError() << endl;
} else {
cout << " [OK]" << endl;
}
int numJoy = SDL_NumJoysticks();
if(numJoy > 0) {
cout << "Joysticks: " << numJoy << endl;
for (int i = 0; i < numJoy; i++) {
vector<bool> aux;
for (int j = 0; j < JOY_MAX_EVENTS; j++) {
aux.push_back(false);
}
joyMap.push_back(aux);
}
} else {
cout << "Joystick not found..." << endl;
}
return;
}
void Enjin::setFullScreen(bool full) {
Uint32 flags = SDL_DOUBLEBUF | SDL_SWSURFACE;
if (full) {
flags = SDL_DOUBLEBUF | SDL_SWSURFACE | SDL_FULLSCREEN;
}
screen = SDL_SetVideoMode(screen->w, screen->h, 32, flags);
if (screen == NULL) {
cout << "[FAIL] Video mode settings: " << SDL_GetError() << endl;
SDL_Quit();
return;
}
}
void Enjin::set(string t, uint w, uint h) {
Uint32 flags = SDL_DOUBLEBUF | SDL_SWSURFACE;
screen = SDL_SetVideoMode(w, h, 32, flags);
if (screen == NULL) {
cout << "[FAIL] Video mode settings: " << SDL_GetError() << endl;
SDL_Quit();
return;
}
SDL_WM_SetCaption(t.c_str(), NULL);
}
void Enjin::delay(int d) {
SDL_Delay(d);
}
void Enjin::drawScreen() {
SDL_Flip(screen);
}
SDL_Surface* Enjin::createImage(int w, int h) {
return SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, 0, 0, 0, 0);
}
SDL_Surface* Enjin::loadImage(string fileName) {
cout << "Loading image " << fileName << “…”;
SDL_Surface *image = IMG_Load(fileName.c_str());
if (image == NULL) {
cerr << "[FAIL] " << IMG_GetError() << endl;
return NULL;
}
if (SDL_SetColorKey(image, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(
image->format, COLORKEY)) == -1) {
cerr << “[FAIL] " << SDL_GetError() << endl;
return NULL;
}
cout << " [OK]” << endl;
return image;
}
void Enjin::drawImage(SDL_Surface *srcimg, SDL_Surface *dstimg, int x, int y,
int alpha = 255) {
blitImage(srcimg, 0, 0, srcimg->w, srcimg->h, dstimg, x, y, alpha);
}
void Enjin::blitImage(SDL_Surface *srcimg, int sx, int sy, int sw, int sh,
SDL_Surface *dstimg, int dx, int dy, int alpha = 255) {
if ((srcimg == NULL) || (alpha == 0)) {
return; //If theres no image, or its 100% transparent.
}
SDL_Rect src, dst;
src.x = sx;
src.y = sy;
src.w = sw;
src.h = sh;
dst.x = dx;
dst.y = dy;
dst.w = src.w;
dst.h = src.h;
if (alpha != 255)
SDL_SetAlpha(srcimg, SDL_SRCALPHA, alpha);
SDL_BlitSurface(srcimg, &src, dstimg, &dst);
}
SDL_Surface* Enjin::getSprite(string nome) {
spriteNameIterator = spriteName.find(nome);
if(spriteNameIterator != spriteName.end()) {
spriteIterator = spriteMap.find(spriteNameIterator->second);
if(spriteIterator != spriteMap.end()) {
return spriteMap.find(spriteNameIterator->second)->second;
}
}
return NULL;
}
bool Enjin::loadSprite(string caminhofisico, string nome) {
if(spriteMap.find(caminhofisico) == spriteMap.end() && spriteName.find(nome) == spriteName.end()) {
spriteMap[caminhofisico] = loadImage(caminhofisico);
spriteName[nome] = caminhofisico;
return true;
}
return false;
}
void Enjin::setPixel(SDL_Surface* image, int x, int y, SDL_Color color) {
Uint32 col = SDL_MapRGB(image->format , color.r, color.g, color.b);
char* pos = (char*) image->pixels;
pos += image->pitch * y;
pos += image->format->BytesPerPixel * x;
memcpy(pos, &col, image->format->BytesPerPixel);
}
SDL_Color Enjin::getPixel(SDL_Surface* image, int x, int y) {
SDL_Color color;
Uint32 col = 0;
char* pos = (char*) image->pixels;
pos += image->pitch * y;
pos += image->format->BytesPerPixel * x;
memcpy(&col, pos, image->format->BytesPerPixel);
SDL_GetRGB(col, image->format, &color.r, &color.g, &color.b);
return color;
}
SDL_Color Enjin::color(int r, int g, int b) {
SDL_Color c;
c.r = r;
c.g = g;
c.b = b;
return c;
}
bool Enjin::isColor(SDL_Color c, int r, int g, int b) {
if ((c.r == r) && (c.g == g) && (c.b == b)) {
return true;
}
return false;
}
void Enjin::stopMusic() {
if (Mix_PlayingMusic() == 1) {
Mix_HaltMusic();
}
}
void Enjin::setMusicVolume(int volume) {
if (volume > 128) {
volume = 128;
}
if (volume < 0) {
volume = 0;
}
Mix_VolumeMusic(volume);
musicVolume = volume;
}
void Enjin::setSoundVolume(int volume) {
if (volume > 128) {
volume = 128;
}
if (volume < 0) {
volume = 0;
}
Mix_Volume(-1, volume);
soundVolume = volume;
}
int Enjin::getMusicVolume() {
return musicVolume;
}
int Enjin::getSoundVolume() {
return soundVolume;
}
Mix_Music* Enjin::loadMusic(string fileName) {
cout << "Loading music " << fileName << “…”;
Mix_Music* musicData = Mix_LoadMUS(fileName.c_str());
if (musicData == NULL) {
cout << "[FAIL] Failed to load music " << fileName << endl;
return NULL;
}
cout << “[OK]” << endl;
return musicData;
}
Mix_Chunk* Enjin::loadSound(string fileName) {
cout << "Loadding sound " << fileName;
Mix_Chunk* sound =
Mix_LoadWAV_RW(SDL_RWFromFile(fileName.c_str(), “rb”), 1);
if (sound == NULL) {
cerr << “[FAIL] Failed to load sound " << fileName << endl;
return false;
}
cout << " [OK]” << endl;
return sound;
}
void Enjin::playMusic(Mix_Music* music, int repeats) {
if (music == NULL) {
return;
}
stopMusic();
Mix_PlayMusic(music, repeats);
}
void Enjin::playSound(Mix_Chunk* sound, uint repeats) {
if (sound == NULL) {
return;
}
if (Mix_PlayChannel(-1, sound, repeats) == -1) {
cout << "Sound: Failed to play sound " << Mix_GetError() << endl;
}
}
TTF_Font Enjin::loadFont(string fileName, int size) {
cout << "Text: Loadding font " << fileName;
TTF_Font font;
font = TTF_OpenFont(fileName.c_str(), size);
if (font == NULL) {
cerr << "[FAIL] Unable to load font: " << fileName << " “
<< TTF_GetError() << endl;
return false;
}
cout << " [OK]” << endl;
return font;
}
void Enjin::drawText(string text, SDL_Surface *dstimg, TTF_Font *font, int x,
int y, SDL_Color *fg, SDL_Color *bg) {
SDL_Color tmpFontColor = { 0, 0, 0, 255 };
SDL_Color tmpFontBgColor = { 255, 0, 255, 255 };
SDL_Surface *textImage = NULL;
if (fg != NULL) {
tmpFontColor.r = fg->r;
tmpFontColor.g = fg->g;
tmpFontColor.b = fg->b;
}
if (bg != NULL) {
tmpFontBgColor.r = bg->r;
tmpFontBgColor.g = bg->g;
tmpFontBgColor.b = bg->b;
textImage = TTF_RenderText_Shaded(font, text.c_str(), tmpFontColor, tmpFontBgColor);
}
if (textImage == NULL) {
textImage = TTF_RenderText_Blended(font, text.c_str(), tmpFontColor);
}
drawImage(textImage, dstimg, x, y, 255);
SDL_FreeSurface(textImage);
}
bool Enjin::updateEvents() {
SDL_Event event;
vector keys;
mouseButtonUp = 0;
mouseButtonDown = 0;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
return true;
break;
case SDL_KEYDOWN:
keyMap[event.key.keysym.sym] = 'd';
keys.push_back(event.key.keysym.sym);
break;
case SDL_KEYUP:
keyMap[event.key.keysym.sym] = 'u';
keys.push_back(event.key.keysym.sym);
break;
case SDL_MOUSEMOTION:
mouseX = event.motion.x;
mouseY = event.motion.y;
break;
case SDL_MOUSEBUTTONUP:
mouseButtonUp = event.button.button;
break;
case SDL_MOUSEBUTTONDOWN:
mouseButtonDown = event.button.button;
break;
case SDL_JOYAXISMOTION:
//cout << "SDL_JOYAXISMOTION " << event.jaxis.value << endl;
break;
case SDL_JOYBALLMOTION:
//cout << "SDL_JOYBALLMOTION " << endl;
break;
case SDL_JOYHATMOTION:
//cout << "SDL_JOYHATMOTION " << event.jhat.hat << " " << event.jhat.value << endl;
break;
case SDL_JOYBUTTONDOWN:
//cout << "SDL_JOYBUTTONDOWN " << event.jbutton.button << endl;
break;
default:
break;
}
}
//check to see if any keys haven't been released but were press
// ie being held
for (map<int, char>::iterator itr = keyMap.begin(); itr != keyMap.end(); itr++) {
//put no status flag
if (itr->second == 'u') {
bool keyFound = false;
for (uint i = 0; i < keys.size(); i++) {
if (keys[i] == itr->first) {
keyFound = true;
break;
}
}
if (!keyFound) {
itr->second = 'n';
}
} else if (itr->second == 'd') {
bool keyFound = false;
for (uint i = 0; i < keys.size(); i++) {
if (keys[i] == itr->first) {
keyFound = true;
break;
}
}
if (!keyFound) {
itr->second = 'h';
}
}
}
for (int i = 0; i < SDL_NumJoysticks(); i++) {
SDL_Joystick* joy = SDL_JoystickOpen(i);
for (int j = 0; j < JOY_MAX_BUTTONS; j++) {
joyMap[i][j] = SDL_JoystickGetButton(joy, j);
}
// Comparamos com 16 em vez de zero para contornar desvios de calibragem
joyMap[i][JOY_UP] = (SDL_JoystickGetAxis(joy, 1) < -16);
joyMap[i][JOY_DOWN] = (SDL_JoystickGetAxis(joy, 1) > 16);
joyMap[i][JOY_LEFT] = (SDL_JoystickGetAxis(joy, 0) < -16);
joyMap[i][JOY_RIGHT] = (SDL_JoystickGetAxis(joy, 0) > 16);
}
return false;
}
bool Enjin::isKeyHeld(int key) {
if (keyMap[key] == ‘h’) {
return true;
}
return false;
}
bool Enjin::isKeyDown(int key) {
if (keyMap[key] == ‘d’) {
return true;
}
return false;
}
bool Enjin::isKeyUp(int key) {
if (keyMap[key] == ‘u’) {
return true;
}
return false;
}
bool Enjin::isMouseDown() {
if (mouseButtonDown != 0) {
return true;
}
return false;
}
bool Enjin::isMouseUp() {
if (mouseButtonUp != 0) {
return true;
}
return false;
}
int Enjin::getMouseButton() {
int aux = mouseButtonDown;
if (mouseButtonDown == 0) {
aux = mouseButtonUp;
}
return aux;
}
int Enjin::getMouseX() {
return mouseX;
}
int Enjin::getMouseY() {
return mouseY;
}
bool Enjin::isJoystickUp(int joy) {
if (joy < SDL_NumJoysticks()) {
return joyMap[joy][JOY_UP];
}
return false;
}
bool Enjin::isJoystickDown(int joy) {
if (joy < SDL_NumJoysticks()) {
return joyMap[joy][JOY_DOWN];
}
return false;
}
bool Enjin::isJoystickLeft(int joy) {
if (joy < SDL_NumJoysticks()) {
return joyMap[joy][JOY_LEFT];
}
return false;
}
bool Enjin::isJoystickRight(int joy) {
if (joy < SDL_NumJoysticks()) {
return joyMap[joy][JOY_RIGHT];
}
return false;
}
bool Enjin::isJoystickButtonPressed(int joy, int button) {
if (joy < SDL_NumJoysticks()) {
if (button < JOY_MAX_EVENTS) {
return joyMap[joy][button];
}
return false;
}
return false;
}
Enjin::~Enjin() {
cout << “Finalizing Enjin…”;
for(spriteIterator = spriteMap.begin(); spriteIterator != spriteMap.end(); spriteIterator++) {
SDL_FreeSurface(spriteIterator->second);
//delete spriteIterator->second;
}
spriteMap.clear();
spriteName.clear();
stopMusic();
Mix_CloseAudio();
SDL_Quit();
cout << " [OK]" << endl;
}
os dois sao .cpp e tem mais esses .h
enjin.h:
#ifndef ENJIN_H_
#define ENJIN_H_
#include “Globals.h”
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL_ttf.h>
class Enjin {
private:
int musicVolume;
int soundVolume;
map<int, char> keyMap;
vector< vector > joyMap;
int mouseX;
int mouseY;
int mouseButtonUp;
int mouseButtonDown;
map<string,SDL_Surface*> spriteMap;
map<string,string> spriteName;
map<string, SDL_Surface*>::iterator spriteIterator;
map<string,string>::iterator spriteNameIterator;
public:
SDL_Surface *screen;
Enjin();
~Enjin();
// Images
void set(string t, uint w, uint h);
void setFullScreen(bool full);
void drawScreen();
void delay(int d);
void drawImage(SDL_Surface *srcimg, SDL_Surface *dstimg, int x, int y,
int alpha);
void blitImage(SDL_Surface *srcimg, int sx, int sy, int sw, int sh,
SDL_Surface *dstimg, int dx, int dy, int alpha);
SDL_Surface* createImage(int w, int h);
SDL_Surface* loadImage(string fileName);
bool loadSprite(string caminhofisico, string nome);
SDL_Surface* getSprite(string nome);
void setPixel(SDL_Surface* image, int x, int y, SDL_Color color);
SDL_Color getPixel(SDL_Surface* image, int x, int y);
SDL_Color color(int r, int g, int b);
bool isColor(SDL_Color c, int r, int g, int b);
// Musics and sounds
void stopMusic();
void setMusicVolume(int Volume);
void setSoundVolume(int Volume);
int getMusicVolume();
int getSoundVolume();
Mix_Music* loadMusic(string fileName);
Mix_Chunk* loadSound(string fileName);
void playMusic(Mix_Music* music, int repeats);
void playSound(Mix_Chunk* sound, uint repeats);
// Fonts and text
TTF_Font *loadFont(string fileName, int size);
void drawText(string text, SDL_Surface *dstimg, TTF_Font *font, int x,
int y, SDL_Color *fg, SDL_Color *bg);
// Events
bool updateEvents();
bool isKeyHeld(int key);
bool isKeyDown(int key);
bool isKeyUp(int key);
bool isMouseDown();
bool isMouseUp();
int getMouseButton();
int getMouseX();
int getMouseY();
bool isJoystickUp(int joy);
bool isJoystickDown(int joy);
bool isJoystickLeft(int joy);
bool isJoystickRight(int joy);
bool isJoystickButtonPressed(int joy, int button);
};
#endif /* ENJIN_H_ */
globals.h:
#ifndef GLOBALS_H_
#define GLOBALS_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include
#include
#include
#include
#include
#include
#include
#define uint unsigned int
#define JOYBUTTON_TRIANGLE 0
#define JOYBUTTON_BALL 1
#define JOYBUTTON_X 2
#define JOYBUTTON_SQUARE 3
#define JOYBUTTON_LEFT_1 4
#define JOYBUTTON_RIGHT_1 5
#define JOYBUTTON_LEFT_2 6
#define JOYBUTTON_RIGHT_2 7
#define JOYBUTTON_SELECT 8
#define JOYBUTTON_START 9
#define JOY_UP 10
#define JOY_RIGHT 11
#define JOY_DOWN 12
#define JOY_LEFT 13
#define JOY_MAX_EVENTS 14
#define JOY_MAX_BUTTONS 10
#define COLORKEY 255, 0, 255
#define Image SDL_Surface
#define Music Mix_Music
#define Sound Mix_Chunk
#define Font TTF_Font
#define Color SDL_Color
using namespace std;
#endif /* GLOBALS_H_ */
e sigleton.h:
#ifndef SINGLETON_H_
#define SINGLETON_H_
template class Singleton {
private:
Singleton();
~Singleton();
Singleton(Singleton const&);
Singleton& operator=(Singleton const&);
public:
/// Retorna o ponteiro para o singleton
static T* getInstance() {
static T instance;
return &instance;
}
};
#endif /* SINGLETON_H_ */
como disse anteriormente nao estou conseguindo fazer uma função bool pra que toque um som quando o personagem sai da tela, se puderem me ajudar eu agradeço
Obrigado