Presentation is loading. Please wait.

Presentation is loading. Please wait.

Overlays végső állapot letöltése (GhostGame) OpenAL letöltése Include könyvtárak,lib könyvtárak  OpenAL/include, OpenAL\include\AL  OpenAL/lib lib referenciák.

Similar presentations


Presentation on theme: "Overlays végső állapot letöltése (GhostGame) OpenAL letöltése Include könyvtárak,lib könyvtárak  OpenAL/include, OpenAL\include\AL  OpenAL/lib lib referenciák."— Presentation transcript:

1

2 Overlays végső állapot letöltése (GhostGame) OpenAL letöltése Include könyvtárak,lib könyvtárak  OpenAL/include, OpenAL\include\AL  OpenAL/lib lib referenciák  OpenAL32.lib, alut.lib dll-ek bin-be másolása OpenAL/bin OpenAL32.dll, alut.dll

3 GameAudio.h #pragma once #include "Inputs.h" #include class GameAudio { public: GameAudio(int argc, char** argv) { printf("*** Initializing OpenAL ***\n"); alutInit (&argc, argv); ALenum error; error = alutGetError(); if(error != AL_NO_ERROR) { Ogre::LogManager::getSingleton().logMessage("Error initializing OpenAL: " + Ogre::String(alutGetErrorString(error))); } ~GameAudio() { printf("*** Shutting down OpenAL ***\n"); alutExit(); } };

4 Main.cpp #include "GameAudio.h"... GameAudio* gameAudio;... int main(int argc, char** argv) { ogreRoot = new Root("",""); gameAudio = new GameAudio(argc, argv);

5 Próba... fordul-e, fut-e

6 Valamit játszunk le class GameAudio { public: GameAudio(int argc, char** argv) { printf("*** Initializing OpenAL ***\n"); alutInit (&argc, argv); ALuint helloBuffer, helloSource; helloBuffer = alutCreateBufferHelloWorld (); alGenSources (1, &helloSource); alSourcei (helloSource, AL_BUFFER, helloBuffer); alSourcePlay (helloSource);

7 Játszadozzunk... alSourcei (helloSource, AL_LOOPING, AL_TRUE); alSourcei (helloSource, AL_GAIN, 10); alSourcef (helloSource, AL_PITCH, 0.3); alListener3f(AL_POSITION, 0,0,0); alSource3f(helloSource, AL_POSITION, -1,0,0); alSourcePlay (helloSource); Hangerő Folyamatos lejátszás Lejátszás sebessége világtérbeli pozíció

8 File lejátszása helloBuffer = alutCreateBufferFromFile(„media/titlemusic.wav"); error = alutGetError(); if(error != AL_NO_ERROR) { Ogre::LogManager::getSingleton().logMessage("Cannot load audio file: "+ Ogre::String(alutGetErrorString(error))); } Próba

9 Error handing #define ALUT_SAFE_CALL(call, message) {call; \ ALenum error = alutGetError(); \ if(error != ALUT_ERROR_NO_ERROR) \ Ogre::LogManager::getSingleton().logMessage(message + Ogre::String(" ") + Ogre::String(alutGetErrorString(error))); \ } #define AL_SAFE_CALL(call, message) {call; \ ALenum error = alGetError(); \ if(error != AL_NO_ERROR) \ Ogre::LogManager::getSingleton().logMessage(message + Ogre::String(" ") + Ogre::String(alutGetErrorString(error))); \ }

10 Title music class GameAudio { ALuint ambientBuffer; ALuint ambientSource; float musicVolume; ALuint loadFile(const char* filename) { ALenum error; ALuint newBuffer; ALUT_SAFE_CALL(newBuffer = alutCreateBufferFromFile(filename), "Cannot load audio file: " + Ogre::String(filename)); return newBuffer; } void createSource(ALuint* source) { AL_SAFE_CALL(alGenSources (1, source), "Unable to generate source"); } public: void playTitleMusic() { AL_SAFE_CALL(alSourceStop(ambientSource), "unable to stop title source"); AL_SAFE_CALL(alSourcei (ambientSource, AL_BUFFER, ambientBuffer), "unable to bind buffer to ambient source"); AL_SAFE_CALL(alSourcePlay (ambientSource), "unable to play title source"); }

11 Title Music GameAudio(int argc, char** argv) { … // az eddigi hellowBuffer és Source helyett ambientBuffer = loadFile("media/titlemusic.wav"); createSource(&ambientSource); AL_SAFE_CALL(alSourcei (ambientSource, AL_BUFFER, ambientBuffer), "unable to bind title buffer"); AL_SAFE_CALL(alSourcei (ambientSource, AL_LOOPING, AL_TRUE), "unable to set looping"); musicVolume = 10; alSourcei (ambientSource, AL_GAIN, musicVolume); }

12 Title Music int main(int argc, char* argv[]) { … gameAudio = new GameAudio(argc, argv); gameAudio->playTitleMusic(); Próba

13 Egyébb bufferek //Uj publikus függvények a GameAudio osztályba ALuint levelAmbientBuffer; ALuint ghostBirthBuffer; ALuint ghostDeathBuffer; ALuint* ghostSources; void loadLevelResources(int maxGhostCount) { levelAmbientBuffer = loadFile("media/ambient.wav"); ghostBirthBuffer = loadFile("media/ghostbirth.wav"); ghostDeathBuffer = loadFile("media/ghostdeath.wav"); ghostSources = new ALuint[maxGhostCount]; for(int i = 0; i < maxGhostCount; ++i) { alGenSources (1, &ghostSources[i]); alSourcef(ghostSources[i], AL_GAIN, 0.2); } void playAmbientMusic() { AL_SAFE_CALL(alSourceStop(ambientSource), "unable to stop level ambient source"); AL_SAFE_CALL(alSourcei (ambientSource, AL_BUFFER, levelAmbientBuffer), "unable to bind buffer to ambient source"); AL_SAFE_CALL(alSourcePlay (ambientSource), "unable to play level ambient source"); } //main.cpp setupPostProc(); gameAudio->loadLevelResources(ghosts->getParticleQuota()); gameAudio->playAmbientMusic(); Próba

14 Szellem születik/meghal //Uj publikus függvények a GameAudio osztályba void ghostBirth(int ghost) { AL_SAFE_CALL(alSourceStop(ghostSources[ghost]), "unable to stop ghost source" + Ogre::StringConverter::toString(ghost)); AL_SAFE_CALL(alSourcei (ghostSources[ghost], AL_BUFFER, ghostBirthBuffer), "unable to bind buffer to ghost source " + Ogre::StringConverter::toString(ghost)); AL_SAFE_CALL(alSourcePlay (ghostSources[ghost]), "unable to play ghost source" + Ogre::StringConverter::toString(ghost)); alSourcef(ghostSources[ghost], AL_PITCH, 1.0); } void ghostDeath(int ghost) { AL_SAFE_CALL(alSourceStop(ghostSources[ghost]), "unable to stop ghost source" + Ogre::StringConverter::toString(ghost)); AL_SAFE_CALL(alSourcei (ghostSources[ghost], AL_BUFFER, ghostDeathBuffer), "unable to bind buffer to ghost source " + Ogre::StringConverter::toString(ghost)); AL_SAFE_CALL(alSourcePlay (ghostSources[ghost]), "unable to play ghost source" + Ogre::StringConverter::toString(ghost)); alSourcef(ghostSources[ghost], AL_PITCH, 2.0); }

15 Szellem születik/meghal //main.cpp class GhostCounter : public ParticleAffector { … void _initParticle(Particle* pParticle) { … gameAudio->ghostBirth(ghosts->getNumParticles() - 1); } class ShootController { … bool handleEvent {... ++ghostShooted; mainHUD->refreshScore(ghostBorn, ghostShooted); gameAudio->ghostDeath(ghostID); Próba

16 Harang class GameAudio { ALuint bellBuffer; ALuint bellSource; … void loadLevelResources(int maxGhostCount) { … bellBuffer = loadFile("media/churchbell.wav"); createSource(&bellSource); AL_SAFE_CALL(alSourcei (bellSource, AL_BUFFER, bellBuffer), "unable to bind buffer to bell source"); alSourcei(bellSource, AL_LOOPING, AL_TRUE); alSource3f(bellSource, AL_POSITION, 0.5f,10.0f,-8.0f); alSourcef(bellSource, AL_GAIN, 30); } void playTitleMusic() { AL_SAFE_CALL(alSourcePause(bellSource), "unable to stop bell source"); … } void playAmbientMusic() { … AL_SAFE_CALL(alSourcePlay (bellSource), "unable to play bell source"); } Próba

17 Hallgató //Uj publikus függvény a GameAudio osztályba void setListenerPose(Ogre::Vector3 pos, Ogre::Vector3 dir) { alListener3f(AL_POSITION, pos.x, pos.y, pos.z); float orient[] = {dir.x, dir.y, dir.z, 0, 1, 0}; alListenerfv(AL_ORIENTATION, orient); } //main.cpp class CameraAnimation { … bool frameStarted { … camera->setDirection(oldDir * (1.0 - smooth) + newDir * smooth); gameAudio->setListenerPose(camera->getPosition(), camera->getDirection()); Próba

18 Szellemek pozíciója //Uj publikus függvény a GameAudio osztályba void setGhostPosition(int ghost, Ogre::Vector3 pos) { alSource3f(ghostSources[ghost],AL_POSITION, pos.x, pos.y, pos.z); } //main.cpp class GhostCounter : public ParticleAffector { void _affectParticles(ParticleSystem* pSystem, Real timeElapsed) { int ghostCount = ghosts->getNumParticles(); for(unsigned int i = 0; i < ghostCount; ++i) { gameAudio->setGhostPosition(i, ghosts->getParticle(i)->position + ghosts->getParentSceneNode()->getPosition()); } Próba

19 Vége Sok minden lehetne még……


Download ppt "Overlays végső állapot letöltése (GhostGame) OpenAL letöltése Include könyvtárak,lib könyvtárak  OpenAL/include, OpenAL\include\AL  OpenAL/lib lib referenciák."

Similar presentations


Ads by Google