Форум: "Потрепаться";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизОбьекты, классы,... Найти похожие ветки
← →
Juster~ (2003-06-10 23:12) [0]Допустим, есть класс TGameShell, который содержит информацию о каком-либо снаряде. В нем есть св-во Warhead, которое должно содержать обьект - боеголовка, этот обьект выполняет единственное действие: рендерит снаряд. Но снарядов много и поэтому тип св-ва Warhead не известен заранее, это может быть, к примеру, TFXBlaster, TFXPlasma, TFXBullet и тп.
Как осуществить создание обьекта Warhead (в run-time его тип будет уже известен) и обращение к нему? Я пытался сделать сделать Warhead указателем на структуру TFXEffect (от которой происходят все TFX<...>), пытался сделать просто указателем, но не получается что-то.
Спасибо...
← →
Всеволод Соловьёв (2003-06-10 23:21) [1]type TWarhead = record
case Integer of
0:(TFXBlaster);
1:(TFXPlasma);
2:(TFXBullet);
end;
итд, можно packed еще поставить
← →
Juster~ (2003-06-11 08:14) [2]Спасибо. Как объявить класс вы сказали, а как создавать объект - нет...
p.s. а что packed делает?
← →
k-man (2003-06-11 08:36) [3]Я не очень понял вопроса:
то есть фактичесик в свойство Warhead содержит объект класса TWarHead.
От него (класса TWarhead) есть наследники - TFXBlaster, TFxPlasma.... Во время выполнения ты уже знаешь какого типа
должен быть объкт и пишешь например
WarHead := TFXPlasma.Create();
> Спасибо. Как объявить класс вы сказали, а как создавать
> объект - нет...
Где Сева в свем посте объявил класс?
> .s. а что packed делает?
Обеспечивает более компактное хранение данных, при этом замедляя к ним доступ.
← →
Всеволод Соловьёв (2003-06-11 09:04) [4]В нем есть св-во Warhead, которое должно содержать обьект - боеголовка, этот обьект выполняет единственное действие: рендерит снаряд. Но снарядов много и поэтому тип св-ва Warhead не известен заранее
может, лучше его сделать перечислимым свойством?
type xxx=(xBlaster, xPlasma);
итдю Не сразу понятно, что вам надо.
← →
k-man (2003-06-11 09:29) [5]Да нет там же сказано WarHead - это объект.
А в чем вопрос?: Может - как создать объект?
Тогда я уже ответил.
← →
Juster~ (2003-06-11 09:36) [6]Где Сева в свем посте объявил класс?
виноват, ошибся...
может, лучше его сделать перечислимым свойством?
нет нужен объект, т.к. у него будет процедура render()
А в чем вопрос?: Может - как создать объект?
Тогда я уже ответил.
Спасибо, сейчас попробую
← →
k-man (2003-06-11 09:40) [7]
> Спасибо, сейчас попробую
Пожалуйста ;)
← →
Juster~ (2003-06-11 10:03) [8]Попробовал. Объект создается, но не получается вызвать его процедуру.
TFXEffect = class
procedure Render; virtual; // пустая процедура
end;
TGameShell = class
Warhead : TFXEffect;
...
end;
TFXBlaster = class (TFXEffect)
procedure Render(...); overload; // процедура с кодом вывода изображения бластера
end;
Теперь мне надо вызвать процедуру рендеринга из класса TFXBlaster. Делал так:
TFXEffect(Warhead).Render
TFXBlaster(Warhead).Render
Warhead.Render
Все равно вызывается проц-ра из TFXEffect. Тогда как это сделать?
p.s. Это может быть связано с overload?
← →
Juster~ (2003-06-11 10:06) [9]Я понял! (и минуты не прошло :)
Это связано с тем, что я сделал TFXBlaster.Render overload процедурой. Но ведь мне надо передавать в нее информацию предка...
← →
Juster~ (2003-06-11 10:07) [10]блин, пока писал 3 минуты прошло :)
← →
k-man (2003-06-11 10:09) [11]Так в чем теперь загвоздка?
← →
Andryk (2003-06-11 10:15) [12]Какой Overload?
Надо override
← →
Juster~ (2003-06-11 10:30) [13]Все, я разобрался. Спасибо всем!
← →
Sandman25 (2003-06-11 10:39) [14]Почему используется overload, а не override?
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c