explosionarray.cpp

来自「series60 应用程序开发的源代码 series60 应用程序开发的源代码」· C++ 代码 · 共 96 行

CPP
96
字号
/**
 *
 * @brief Definition of CExplosionArray
 *
 * Copyright (c) EMCC Software Ltd 2003
 * @version 1.0
 */

//Class Include
#include "ExplosionArray.h"

// System Include
#include <e32math.h>

// User Include
#include "Explosion.h"

const TInt KAreaOfImage = 16;


CExplosionArray* CExplosionArray::NewL(const TRect aValidArea)
{
    CExplosionArray* self = CExplosionArray::NewLC(aValidArea);
    CleanupStack::Pop();
    return self;
}

CExplosionArray* CExplosionArray::NewLC(const TRect aValidArea)
{
    CExplosionArray* self = new (ELeave) CExplosionArray(aValidArea);
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

CExplosionArray::CExplosionArray(const TRect aValidArea) :
    iValidArea(aValidArea)
{
}

CExplosionArray::~CExplosionArray()
{
    iExplosionsArray.ResetAndDestroy();
    iExplosionsArray.Close();
}

void CExplosionArray::ConstructL()
{
}

void CExplosionArray::CreateExplosionL()
{
    TInt x = 0;
    TInt y = 0;
    GenerateRandomPosition(x, y);
    CExplosion* explosion = CExplosion::NewLC(TPoint(x,y)); // created using NewLC because it is an automatic not member data
    CleanupStack::Pop();
    iExplosionsArray.Append(explosion);
}

void CExplosionArray::DrawExplosions(CBitmapContext& aBitmapContext)
{
    TInt currentExplosion = 0;
    TInt sizeOfArray = iExplosionsArray.Count();

    while(currentExplosion < sizeOfArray)
    {
        if(iExplosionsArray[currentExplosion]->IsFinished())
        {
            delete iExplosionsArray[currentExplosion];
            iExplosionsArray.Remove(currentExplosion);
            iExplosionsArray.Compress();
            sizeOfArray--;
        }
        else
        {
            iExplosionsArray[currentExplosion]->BlitCurrentFrame(aBitmapContext);
            currentExplosion++;
        }
    }
}

void CExplosionArray::GenerateRandomPosition(TInt& aX, TInt& aY)
{
    TTime randomTime;
    randomTime.HomeTime();
    TInt64 seed = randomTime.Int64();
    TInt randomX = Math::Rand(seed);
    TInt randomY = Math::Rand(seed);

    aX = randomX % iValidArea.Width();
    aY = randomY % iValidArea.Height();
}

// End of File

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?