Войти
ФлеймФорумПрограммирование

вопрос по наследованию в С++ (2 стр)

Страницы: 1 2 3 Следующая »
#15
15:20, 10 мар. 2013

Sergio
> Поэтому оставь так, как было (setPricel - опять таки можно использовать
> структуру вектора и иметь только один сеттер для прицела). И заведи два списка
> - один для все игровых объектов, второй для кораблей

да да, так щас и делаю. Спасибо, кажется начинаю разбираться :)

хотя.... координаты прицела ведь нужны же еще для пули, чтобы понять, в какую сторону её отправить.


#16
15:33, 10 мар. 2013

Atlant1Q
> хотя.... координаты прицела ведь нужны же еще для пули, чтобы понять, в какую
> сторону её отправить.

У любого объекта есть
а) позиция px, py
б) вектор скорости vx, vy
в) размер и форма (для простоты можно все сделать сферами - радиус r)

А вот у корабля да еще может быть отдельно - направление носа чтобы правильно считать ускорение и т.п.

#17
15:35, 10 мар. 2013

Atlant1Q
> что мне нужно сделать виртуальные методы SetPricelX(int) и SetPricelY(int) в
> базовом классе?

Нет. У тебя уже есть отдельно выделенный указатель на Ship * и через него ты спокойно вызываешь SetPricel-ы. Но так же указатель на Ship* уже в виде GameObject* ложи в общий список чтобы ему "бесплатно" разадавались все события что и остальным объектам - астероидам, пулям - типа Tick/Draw/TakeDamage и т.п.

#18
15:38, 10 мар. 2013

Atlant1Q
> private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
Бедные школьники по милости майкрософт вместо крестов изучают их кривую поделку C++\CLI. Это даже не смешно.

#19
15:41, 10 мар. 2013

laMer007
> Бедные школьники по милости майкрософт вместо крестов изучают их кривую поделку
> C++\CLI. Это даже не смешно.
ну вообще то CLI это дополнение к C++, такчто С++ можно изучать и с использованием CLI

#20
10:26, 17 мар. 2013

ещё вопрос. Такая ситуация:
есть список указателей на объекты базового класса

typedef std::list <GameObject*> GameObject_list;
GameObject_list objects;

в котором хранятся объекты, созданные так

new Bullet(bx, by, px, py);
так
new Asteroid( 350, 100, 12);
и так
new Ship(350, 350);

Далее идет их перемещение и отрисовка в главном цикле игры:

for( GameObject_list::iterator i = objects.begin(); i != objects.end(); i++ ) {
          (*i)->Tick();
          (*i)->Draw(BulletIm, g);
}

А теперь, собственно, вопрос: как определить, какой фактически объект передо мной: Bullet, Asteroid или Ship? Для элемента списка *i.
Просто мне сюда

(*i)->Draw(BulletIm, g);
в зависимости от того, что передо мной, нужно передать разные текстурки, и добавить кое какие условия.

#21
10:30, 17 мар. 2013

Atlant1Q
> нужно передать разные текстурки, и добавить кое какие условия.
Засунь все проверки условий внутрь объекта, туда же текстуры

#22
12:26, 17 мар. 2013

Atlant1Q
> А теперь, собственно, вопрос: как определить, какой фактически объект передо
> мной: Bullet, Asteroid или Ship?
никак.
Atlant1Q
> в зависимости от того, что передо мной, нужно передать разные текстурки, и
> добавить кое какие условия.
всё делай на этапе инициализации.

#23
12:30, 17 мар. 2013

Atlant1Q
> А теперь, собственно, вопрос...

Причём я тебе на него ответил на прошлой странице - вдумчивее надо читать и давать на поиск непонятные (ключевые) слова.

#24
12:33, 17 мар. 2013

MarkoPolo
> Не делай виртуального Draw, это медленно. Попытайся сделать так, чтобы все
> методы, которые ты будешь использовать часто не были виртуальными.

Даже в супердвижках есть виртуальные, другок дело как и где ... ТК можно на это дело забить ещё очень долго ...

#25
13:09, 17 мар. 2013

=A=L=X=
> Причём я тебе на него ответил на прошлой странице - вдумчивее надо читать и
> давать на поиск непонятные (ключевые) слова.
я это видел и помню:) просто когда начал гуглить про dynamic_cast, ничего кроме как то, что это преобразователь объектных типов, ничего не нашел. Буду дальше копаться, что поделать:/

#26
15:34, 17 мар. 2013

Можно добавить каждому классу метод, возвращающий его тип:

enum EnumType
{
  eBullet,
  eShip,
  eAsteroid,
};

class Bullet
{
...
  EnumType getType()const{ return eBullet; }
...
};

Потом уже проверять что за тип класса у тебя:

switch ( pObject->getType() )
{
  case eBullet: ...
  case eShip: ...
};


Но данный подход может пригодится в исключительных ситуациях. Draw совсем не тот случай. Как уже сказали, храни информацию внутри объекта.

#27
16:33, 17 мар. 2013

Atlant1Q
> я это видел и помню:) просто когда начал гуглить про dynamic_cast, ничего кроме
> как то, что это преобразователь объектных типов, ничего не нашел. Буду дальше
> копаться, что поделать:/
забудь то поры до времени про dynamic_cast
Volodar
> Можно добавить каждому классу метод, возвращающий его тип:
не учи его плохому.

#28
16:44, 17 мар. 2013

Volodar
> Но данный подход может пригодится в исключительных ситуациях
Пулефизика именно так и делает, не? Все лучше, чем динамиккаст методом тыка.

#29
16:53, 17 мар. 2013

Chaos_Optima
> не учи его плохому
Я же сразу и исправился :)

Страницы: 1 2 3 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.

Тема закрыта.