Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-97641
_Nox
2003-06-19 23:52
2003.06.30
Размер стэка?


14-97873
pargo
2003-06-13 14:31
2003.06.30
Компонент Delphi


11-97568
lamachok
2002-10-22 20:08
2003.06.30
поиск-запись


1-97712
MakNik
2003-06-18 11:36
2003.06.30
автозагрузка


3-97548
_Andrew_
2003-06-07 02:05
2003.06.30
Ускорение поиска





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский