Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Создание объектов   Найти похожие ветки 

 
Falcon(TFSoft) ©   (2004-10-27 20:09) [0]

Ув. Мастера подскажите как получить доступ к объектам создаваемым таким образом:
with TMoSprite.Create(DXSpriteEngine.Engine) do
 begin
 Image := ImageList.Items.Find("img1");
 X := Random(5000)-2500;
 Y := Random(5000)-2500;
 Z := 2;
 Width := Image.Width;
 Height := Image.Height;
 ***
 end;


Тоесть кто будет их родитель и как вообще их потом найти, чтоб изменить какие-либо их параметры?

Зарание спасибо!


 
Guest_999   (2004-10-28 17:39) [1]

А зачем их так создавать?!?!


 
Falcon(TFsoft) ©   (2004-10-28 20:54) [2]

А затем, чтоб не ввводить кучу переменных, но если созданный таким образоб объекты не могут быть заполучены, то получается что такой способ не эфективен.

Хотя я тут подумал, что вызвать то или иное свойство наверное сожно создав обработку сообщений в этих объектах, такое возможно.

Или что никому не доводилось иметь с таким дело :( ??


 
Megabyte-ceercop ©   (2004-10-29 11:10) [3]

Тут нужно чтобы спрайт сам выкладывал свои значения в глобальные переменные из функции doMove()
Пример

public double globalX,globalY;

MainHeroSprite.doMove()
{
globalX = X;
globalY = Y;
}


затем можно читать значения Х У спрайта MainHeroSprite из дублирующих глобальных переменных.

Я другого способа не находил.

Обычно бывает необходимость доступа к значениям только главного героя. А если нужно сравнить координаты героя с координатами врагом, то пусть это делается в функции врага, которые будут брать координаты героя из глобальных дублирующих переменных, а не наоборот, когда герой пытается проверить все координаты врагов.

Привет Falcon кстати :))


 
Плохиш ©   (2004-10-29 11:43) [4]


> Тоесть кто будет их родитель и как вообще их потом найти,
> чтоб изменить какие-либо их параметры?

Родителя ты передал в Create(xxx), Найти через Components родителя.

> Хотя я тут подумал, что вызвать то или иное свойство наверное
> сожно создав обработку сообщений в этих объектах, такое
> возможно.

Да. См. справку по событиям (Onxxx)


 
Megabyte-ceercop ©   (2004-10-29 12:18) [5]


> создав обработку сообщений в этих объектах

Вот вот, globalX и globalY - это и есть сообщение Главного спрайта врагам. (см. мой пост выше)


 
Falcon(TFsoft) ©   (2004-10-30 15:48) [6]

>Плохиш ©
Ок, допустим родитель у нас и есть движок DXSpriteEngine, каким образом мне найти нужный мне спрайт, по каким параметрам?

Если не сложно пару строк в пимер. Буду благодарен.

>Megabyte-ceercop ©
Да, я понимаю, но для игрока, на мой взгляд вообще -то лутше создать переменную, тоесть:

PL := TMoSprite.Create(DXSpriteEngine.Engine)
with PL do
begin
 Image := ImageList.Items.Find("img1");
 ***


Ну, апотом просто считіать его координаты Pl.x, pl.y  и т.д., кроме того это даёт выгоду в том, что можно вызывать спецефические процедуры спрайта игрока, такие как смерть или поворот или, ну вообщем...

>to all :)

А на счёт сообщений, то я имел ввиду не стандартные (OnDoMove, OnDoCollision ... ), а спецефические например (если я всёже не получу доступ к каждому спрайту мин.(напрмер мин)) взовать мину.

Тоетсь у меня на карте 100мин, которые я хочу взорвать при нажатии на кнопку, причем их может быть как больше так и меньше, и игрок их расставляет. Так вот если я хрчу их взорвать, и уменя етсь напрмер амссив с переменными, то я просто прокручиваю этот масив, и выполняю процедуру мина.взрыв.
Но если у меня нет этого массива, я просто не хочу его создавать или по каким либо другим причинам у меня его нет, то как послать фзрыв всем минам. Я вижу (пока) лиш один выход, создать обработку сообщения WM_MINE_BADBOOM=WM_USER+1, которое будет обрабатываться спрайтами мин, и которое я буду посылать при нажатии на кнопку.

Так вот, можно ли к примеру решиьт вышеописанную задачу каким либо другим способом (ну как например предлогал ув. >Плохиш © методом поиска у родителя, пример если можно). Буду благодарен за ответ, потому что ни одни из вышеописанных способом мне не очень нравится. Первый потомучт ущербный по кол-ву переменных, второй - т.к. не пригоден из-за невозможности получить доступ из одного спрайта к полям другого (хотя и возможно, но я думаю будет проблематично...)

Надеюсь я ясно изложил проблему, и совершенно не сбил вас с толку :)


 
RyDmi ©   (2004-11-01 18:46) [7]

Может ты имеешь ввиду это:

for i:=0 to DxSpriteEngine.Engine.AllCount-1 do
if DxSpriteEndine.Engine.Items[i].ClassName="TMoyaMina" then
TMoyaMina(DxSpriteEndine.Engine.Items[i]).Boom;

где Boom - процедура взрыва мины, а TMoyaMina - класс мины.

Хотя может я всё не так понял...


 
Zer0 ©   (2004-11-01 20:06) [8]

ууу, какой мрачняк.
только не говорите что в каждом шаге происходит проверка столкновений ВСЕХ спрайтов со ВСЕМИ, т.е. без оптимизаций...

---
skl-4ever


 
Колбасьев ©   (2004-11-01 22:44) [9]

Реализация всего, чего только можно через объекты не самый хороший способ, по крайней мере так говорит мой приятель, который, когда сделал один объект (управляющий массивом записей), то получил неплохой рост скорости игры, раза этак в три-четыре вроде.


 
RyDmi ©   (2004-11-02 00:24) [10]

To Zer0: само- собой без оптимизации. Если ему нужно с оптимизацией не проще- ли создать массив . Чем он так плох?


 
Falcon(TFSoft) ©   (2004-11-02 01:04) [11]

===RyDmi ©
спасибо... попробую этот вариант.
Да нет массив то не плох, просто представте:
Игрок бегает по карте и ставит мины, причём у каждой мины есть свои приколы (настрокий: задержки времени, мощностиб силы гравитации, поля действи и т.д.) Теперь представте, что мне необходимо взорвать этак мин 5 а остальные оставить, а потом подойти и снять 6 и 9 мины.
А потом я найду ещё мин и положу их в запас или поставлю. Короче вариантов много..
Представляеяте какие преобразования будут с массивами если они недай бог статические ну, или даже динамические (тем хуже, прийдётся доп возится с выдилением/освобождением памяти).

Конечно эту проблему можно решить используя не массивы а самоадрессуемые записи, но тогда зачем создавать велосипед, если за вас его уже сделали. Тоесть зачем самому создавать свою самоадресуемую записьб, а потом мучаться с функциями записи и удаления из неё, если уже есть стандартный объекты типа TList or TView?
Вот вам и ответ на счёт использования массивов и(или) объектов...

А вообще меня интересовал поиск объектов метод создания которых я описал выше, так что спасибо, кто разобрался в вопросе и дал мне правильный (на мой и его взгляды) ответ.

Да, на чсёт столкновений, то целесообразно использовать как проверку столкновения методом DoCollision так и своими встроенными методами (будь-то проверка по массиву карты или ещё какой-то способ).



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.043 c
11-1089658722
AlexR
2004-07-12 22:58
2005.02.06
RichEdit и scrollbar


3-1103900005
qmikle
2004-12-24 17:53
2005.02.06
копирование *.gdb по алиасу BDE


1-1106221314
Dimedrol
2005-01-20 14:41
2005.02.06
Как записать XLS-файл ?


1-1106565839
Aleks
2005-01-24 14:23
2005.02.06
String


14-1105721577
Сергей Г
2005-01-14 19:52
2005.02.06
смайлики





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский