Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

Обьекты, классы,...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
14-97792
Кен
2003-06-09 02:11
2003.06.30
Как получить инфразвук в домашних условиях. Хочу послушать его.


3-97524
alienka
2003-06-06 10:55
2003.06.30
dbGridEh отображение в ячейке...


14-97788
Артурчик
2003-06-13 10:57
2003.06.30
На source.ru праздник


7-97915
DjVirus
2003-04-21 10:47
2003.06.30
Размер директории


6-97775
Nigger
2003-04-23 14:26
2003.06.30
Socket Threads?????