Уроки Коммент.

Создание игр » Новости » Создание игры. Живые объекты.

Создание игры. Живые объекты.

Разработка игры. Урок 1.В нашей первой игре будет как минимум два типа живых объектов: игровые враги и сам игрок. У этих типов игровых объектов будет немало общего: у обоих будет вестись подсчёт жизней, оба типа объектов будут находиться где-то в игровом мире (иметь координаты), оба смогут двигаться по экрану. Но будут и отличия, например, объект “игрок” будет управляться с калвиатуры (или мыши), а враги будут управляться их собственным АИ.

Ввиду того, что часть свойств (точнее функционала) объектов будет одинаковой, я решил сделать отдельный класс, который назвал “живой объект”. Этот класс будет обеспечивать нас базовым функционалом и для игрока, и для игровых противников, а именно:

  • Будет вести подсчёт жизней
  • Будет иметь функцию для уменьшения этих жизней
  • Позволит проверять, жив ли ещё объект (жизней больше нуля)
  • Будет хранить текущую позицию объекта
  • И позволит её менять (своим наследникам)

Выглядеть этот базовый класс живых игровых объектов будет примерно вот так:

//! Класс живого объекта
class CLiveObject
{
private: // приватные данные
	int m_iHealth; // количество жизней
	D3DXVECTOR2 m_vPos; // позиция на экране
 
protected: // защищённые методы, доступ только наследникам
	void Move(float dx, float dy); // сдвинуть на dx, dy
	void Move(const D3DXVECTOR2 delta); // сдвинуть на delta
	void MoveTo(const D3DXVECTOR2 pos); // задать новую позицию
 
public: // публичные методы класса
	CLiveObject(D3DXVECTOR2 pos, int iHealth=100);
	virtual ~CLiveObject(void); // вирт. деструктор
	void DoDamage(const int iDamage); // наносим повреждения
	bool IsAlive() const; // ещё жив (жизней больше 0) ?
	D3DXVECTOR2 Pos() const; // текущая позиция
};

Наследуя от него другие классы (игрока и врагов), мы, тем самым, избавимся от лишней писанины и дублирования кода как минимум в двух местах. Это вообще хорошая практика – выносить общие части кода в отдельные классы, шаблоны, функции. Используйте такие возможности почаще – обычно такой код проще и разрабатывать и поддерживать (т.е. развивать дальше, находить ошибки).

А вот и cpp-файл:

#include "StdAfx.h"
#include "LiveObject.h"
 
CLiveObject::CLiveObject(D3DXVECTOR2 pos, int iHealth)
: m_vPos(pos),
m_iHealth(iHealth)
 
CLiveObject::~CLiveObject(void)
{
}
 
void CLiveObject::DoDamage( const int iDamage )
{
	m_iHealth -= iDamage; // уменьшаем жизни
}
 
bool CLiveObject::IsAlive() const
{
	return ( m_iHealth > 0 ); // жизней больше нуля?
}
 
void CLiveObject::Move( float dx, float dy )
{
	Move(D3DXVECTOR2(dx, dy));
}
 
void CLiveObject::Move( const D3DXVECTOR2 delta )
{
	m_vPos += delta;
}
 
void CLiveObject::MoveTo( const D3DXVECTOR2 pos )
{
	m_vPos = pos;
}
 
D3DXVECTOR2 CLiveObject::Pos() const
{
	return m_vPos;
}

Сорцов к этому уроку не будет – всё необходимое есть выше по тексту.

Ещё по этой теме:




Раздел: Новости

Оставить комментарий

*

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>