📄 exampleapplication.cpp
字号:
#include "ExampleApplication.h"
// include application states
#include "AppStateMenu.h"
#include "AppStateGame.h"
#include "AppStateIntro.h"
#include "AppStateNewHighScore.h"
CExampleApplication::CExampleApplication()
{
// init audio buffers to NULL
TInt i;
for (i=0; i<KAudioNumFiles; i++)
{
iAudioData[i] = NULL;
iAudioSound[i] = NULL;
}
iRepository = CRepository::NewL( KCRUidProfileEngine );
}
CExampleApplication::~CExampleApplication()
{
}
TInt CExampleApplication::OnInitialize()
{
TInt error = KErrNone;
// create game fonts
TFontSpec fs( _L("System"), 120 );
fs.iFontStyle.SetStrokeWeight( EStrokeWeightBold );
fs.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
iWsScreen->GetNearestFontToDesignHeightInTwips(iNormalFont, fs);
TFontSpec fs2( _L("System"), 180 );
fs2.iFontStyle.SetStrokeWeight( EStrokeWeightBold );
fs2.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
iWsScreen->GetNearestFontToDesignHeightInTwips(iBigFont, fs2);
TFontSpec fs3( _L("System"), 120 );
fs3.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
iWsScreen->GetNearestFontToDesignHeightInTwips(iSmallFont, fs3);
// init & load high scores table
TFileName fn;
BuildFilepath(KFilenameHighScores, fn);
#ifdef __WINS__
fn = _L("c:\\scores.dat");
#endif
iHighScores = CHighScores::NewL(fn, 10);
iHighScores->Load();
// init & load settings
BuildFilepath(KFilenameSettings, fn);
#ifdef __WINS__
fn = _L("c:\\settings.dat");
#endif
iSettings = CSettings::NewL(fn);
iSettings->Load();
// create buffer for info area
error = CreateBitmapAndContext( TSize(BackBufferSize().iWidth, 32),
iInfoAreaBuffer,
iInfoAreaBufferContext);
if (error != KErrNone)
{
return error;
}
// initialise the application state
//iLastGameScore = 1000.0;
//error = ChangeAppStateL(EAppUpdateStateInitNewHighScore);
error = ChangeAppStateL(EAppUpdateStateInitIntro);
if (error != KErrNone)
{
return error;
}
return KErrNone;
}
TInt CExampleApplication::InitResources()
{
// load game graphics
TInt error = LoadGraphicsL();
if (error != KErrNone)
{
return error;
}
// init audio
error = InitAudio();
if (error != KErrNone)
{
return error;
}
return KErrNone;
}
TInt CExampleApplication::LoadGraphicsL()
{
TInt i;
TInt errors[KNumBitmaps];
// make room into the bitmap and mask array
for (i=0; i<KNumBitmaps; i++)
{
iBitmaps.Append(NULL);
iMasks.Append(NULL);
}
// load all graphics
i = 0;
errors[i++] = LoadBitmapAndMask(KBitmapBlock0, _L("blocks\\0.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBlock1, _L("blocks\\1.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBlock2, _L("blocks\\2.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBlock2_Frame2, _L("blocks\\2_2.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBlock2_Frame3, _L("blocks\\2_3.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBlock2_Frame4, _L("blocks\\2_4.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBonusMoney, _L("gameplay\\bonus01.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBonusPower, _L("gameplay\\bonus02.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBonusWater, _L("gameplay\\bonus03.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGhostRed, _L("gameplay\\ghost01.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGhostGreen, _L("gameplay\\ghost02.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGhostBlue, _L("gameplay\\ghost03.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapPlayer, _L("gameplay\\player.png"), 8);
errors[i++] = LoadBitmapAndMask(KBitmapBuildingTop, _L("mapitems\\buildingtop.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapBuildingWall, _L("mapitems\\buildingwall.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGrass1, _L("mapitems\\bush01.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGrass2, _L("mapitems\\bush02.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGrass3, _L("mapitems\\bush03.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapGrass4, _L("mapitems\\bush04.png"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapTree1, _L("mapitems\\tree01.png"), 8);
errors[i++] = LoadBitmapAndMask(KBitmapTree2, _L("mapitems\\tree02.png"), 8);
errors[i++] = LoadBitmapAndMask(KBitmapMessage, _L("misc\\message.jpg"), 0);
errors[i++] = LoadBitmapAndMask(KBitmapPhone, _L("misc\\phone.jpg"), 0);
// check if any of the loadings failed
for (i=0; i<KNumBitmaps; i++)
{
if (errors[i] != KErrNone)
{
return errors[i];
}
}
return KErrNone;
}
TInt CExampleApplication::LoadBitmapAndMask(TUint aId, const TDesC& aFilename, TInt aAlphaBits)
{
TFileName filename;
BuildFilepath(aFilename, filename);
// create & load the bitmap
TInt error;
ReturnCode ret;
IBitmap* bitmap = NULL;
ret = CRuntime::CreateInstance( bitmap );
if ( ret != OK )
{
return RGAErrorToSymbianError(ret);
}
ret = bitmap->Reconfigure(CSize(1, 1), BackBuffer().GetColorFormat());
if ( ret != OK )
{
bitmap->Release();
return RGAErrorToSymbianError(ret);
}
error = LoadImage(*bitmap, filename, ETrue);
if (error != KErrNone)
{
bitmap->Release();
return error;
}
iBitmaps[aId] = bitmap;
// load mask
IBitmap* mask = NULL;
if (aAlphaBits > 0)
{
ret = CRuntime::CreateInstance( mask );
if ( ret != OK )
{
return RGAErrorToSymbianError(ret);
}
TBuf<16> extension = filename.Right(4);
TBuf<32> replacewith = _L("_mask");
replacewith += extension;
filename.Replace(filename.Find(extension), 4, replacewith);
if (aAlphaBits == 1)
{
mask->Reconfigure(bitmap->GetSize(), GRAPHICS_FORMAT_MONO);
}
else
{
mask->Reconfigure(bitmap->GetSize(), GRAPHICS_FORMAT_GRAY256);
}
error = LoadImage(*mask, filename, ETrue);
if (error != KErrNone)
{
mask->Release();
mask = NULL;
}
}
iMasks[aId] = mask;
return KErrNone;
}
TInt CExampleApplication::InitAudio()
{
// init audio mixer
ReturnCode ret;
ret = CRuntime::CreateInstance( iAudioMixer );
if (ret != OK)
{
return RGAErrorToSymbianError(ret);
}
// set mixing parameters
CAudioMixerCapabilities caps;
caps.mOutputSampleRates = AUDIO_SAMPLERATE_16000;
caps.mOutputEncodings = AUDIO_ENCODING_16BIT;
caps.mOutputChannels = AUDIO_CHANNEL_STEREO;
ret = iAudioMixer->SetConfiguration( caps );
if (ret != OK)
{
iAudioMixer->Release();
iAudioMixer = NULL;
return RGAErrorToSymbianError(ret);
}
TUint32 mixingbuffersize = 3200;
iAudioMixer->SetOutputBufferSize(mixingbuffersize);
iAudioMixer->Start(this);
return KErrNone;
}
void CExampleApplication::PlayAudio(TInt aIndex, TBool aLoop)
{
// game sounds are on
IAudioSound* sound = iAudioSound[aIndex];
if (sound && iAudioEnabled && iSettings->iVolume)
{
sound->Play();
if (aLoop)
{
sound->LoopComplete();
}
}
}
void CExampleApplication::RePlayAudio(TInt aIndex)
{
IAudioSound* sound = iAudioSound[aIndex];
if (sound && iAudioEnabled && iSettings->iVolume)
{
sound->SetPositionByTime(0);
sound->Play();
}
}
void CExampleApplication::StopAudio(TInt aIndex)
{
IAudioSound* sound = iAudioSound[aIndex];
if (sound)
{
sound->Pause();
}
}
void CExampleApplication::SetAudioVolume(TInt aIndex, TInt aVolume)
{
IAudioSound* sound = iAudioSound[aIndex];
if (sound)
{
sound->SetVolume(aVolume);
}
}
void CExampleApplication::SetMasterVolume(TInt aVolume)
{
iSettings->iVolume = aVolume;
TInt i;
for (i=0; i<KAudioNumFiles; i++)
{
SetAudioVolume(i, aVolume);
}
}
TInt CExampleApplication::MasterVolume() const
{
return iSettings->iVolume;
}
TBool CExampleApplication::AudioEnabled() const
{
return iAudioEnabled;
}
// functions from IAudioObjectObserver
void CExampleApplication::HandleAudioObjectStatus( IAudioObject& /*aAudioObject*/,
const AudioObjectStatus /*aStatus*/,
const uint32 /*aLoopCount*/ ) NO_THROW
{
}
void CExampleApplication::InitializeComplete( IAudioObject& aAudioObject,
ReturnCode aReturnCode ) NO_THROW
{
if (&aAudioObject == iAudioMixer && aReturnCode == OK)
{
// load audio files
ReturnCode ret;
TInt i;
TBuf<256> tmp;
for (i=0; i<KAudioNumFiles; i++)
{
// build wave filename
TFileName fn;
tmp = (TUint16*)KAudioFilenames[i];
BuildFilepath(tmp, fn);
fn.ZeroTerminate();
ret = iAudioMixer->CreateAudioData( iAudioData[i],
(const char16*)fn.Ptr(),
FALSE );
if (ret == OK)
{
ret = iAudioData[i]->CreateSound(iAudioSound[i]);
}
if (ret != OK)
{
if (iAudioData[i])
{
iAudioData[i]->Release();
iAudioData[i] = NULL;
}
iAudioSound[i] = NULL;
}
else
{
iAudioSound[i]->SetVolume(10);
}
}
}
}
void CExampleApplication::OnClose()
{
TInt i;
if (iRepository)
{
delete iRepository;
iRepository = NULL;
}
if (iSettings)
{
// save & delete settings
iSettings->Save();
delete iSettings;
iSettings = NULL;
}
if (iHighScores)
{
// save & delete high scores table
iHighScores->Save();
delete iHighScores;
iHighScores = NULL;
}
// release application state
if (iState)
{
delete iState;
iState = NULL;
}
// release audio files
for (i=0; i<KAudioNumFiles; i++)
{
if (iAudioData[i])
{
iAudioData[i]->Release();
iAudioData[i] = NULL;
}
if (iAudioSound[i])
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -