⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cchrmonster.cpp

📁 Symbian OS S60平台2D游戏引擎案例
💻 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 + -