📄 cchrmonster.cpp
字号:
/*
============================================================================
* Name : CChrMonster.cpp
* Part of : 2DExample
* Description : Implementation of CChrMonster
* Copyright (c) 2007 Nokia Corporation
============================================================================
*/
// INCLUDE FILES
#include "CChrMonster.h"
#include "CSprite.h"
#include "MSystem.h"
#include "CTileMap.h"
const TInt KMaxSpeed = 4096;
CChrMonster* CChrMonster::NewL( CSprite* aSprite, MSystem* aSystem, CTileMap* aMap )
{
CChrMonster* self = new( ELeave )CChrMonster( aSprite, aSystem, aMap );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
return self;
};
CChrMonster::~CChrMonster()
{
}
CChrMonster::CChrMonster( CSprite* aSprite, MSystem* aSystem, CTileMap* aMap )
: iSprite( aSprite )
, iSystem( aSystem )
, iTileMap( aMap )
{
}
void CChrMonster::ConstructL()
{
}
void CChrMonster::ActivateL()
{
iSpeed = TPoint(100 << 16 ,0);
iMonsterDir = 0;
iMoving = EFalse;
}
void CChrMonster::Deactivate()
{
}
void CChrMonster::Draw( CBitmap& aTarget, const TPoint& aCamera )
{
iCameraPos = aCamera;
iSprite->Draw( aTarget, ( iSprAnim >> 2 ) & 1, aCamera );
iSprAnim++;
if( ( aCamera.iX + aTarget.Size().iWidth ) > (iPosition.iX>>16) )
{
iMoving = ETrue;
}
}
void CChrMonster::Move()
{
if( (iPosition.iY>>16) > 36*8 ) // Monster has fallen
{
return;
}
if( iMoving )
{
//TBool move = EFalse;
if( iMonsterDir == 0 )
{
if( ( iPosition.iX >> 16 ) <= 0 ) // Beginning of tilemap
{
iMonsterDir = 1;
}
else
{
iSpeed.iX = -KMaxSpeed;
//move = ETrue;
}
}
else
{
if( ( iPosition.iX >> 16 ) > 253*8 ) // End of Tilemap
{
iSpeed.iX -= iSpeed.iX;
}
else
{
iSpeed.iX = KMaxSpeed;
//move = ETrue;
}
}
TInt x = iPosition.iX >> 16;
TInt y = iPosition.iY >> 16;
// Check bottom collision
TInt tile1 = iTileMap->Tile( TPoint( x+4, y+24 ), 0 );
TInt tile2 = iTileMap->Tile( TPoint( x+20, y+24 ), 0 );
if( tile1 == 1 && tile2 == 1 )
{
iSpeed.iY += 128;
}
else
{
iSpeed.iY = 0;
}
// Check left / right collision
tile1 = iTileMap->Tile( TPoint( x, y+16 ), 0 );
tile2 = iTileMap->Tile( TPoint( x+23, y+16 ), 0 );
if( tile1 != 1 || tile2 != 1 )
{
iSpeed.iX -= iSpeed.iX*2;
if( iMonsterDir == 0 )
{
iMonsterDir = 1;
}
else
{
iMonsterDir = 0;
}
}
iPosition += iSpeed;
}
iSprite->SetPosition( TPoint( iPosition.iX >> 16, iPosition.iY >> 16 ) );
}
TPoint CChrMonster::Position()
{
return TPoint( iPosition.iX >> 16, iPosition.iY >> 16 );
}
void CChrMonster::SetPosition( const TPoint& aPosition )
{
iPosition.iX = aPosition.iX << 16;
iPosition.iY = aPosition.iY << 16;
iSprite->SetPosition( aPosition );
}
void CChrMonster::Die()
{
}
void CChrMonster::SetType( const TChType& aChType )
{
iChType = aChType;
}
CSprite* CChrMonster::Sprite()
{
return iSprite;
}
TChType CChrMonster::Type()
{
return iChType;
}
// End of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -