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

Вниз

DelphiX и спрайты.   Найти похожие ветки 

 
Jus   (2004-09-20 06:17) [0]

В DelphiX...
Например в случайных точках из за экрана появляются энное кол-во зомби TEnemy. Есть игрок TPla.  Как в процедуре

Procedure TEnemy.DoMove(MoveCount:integer);
Begin
Inherited DoMove(MoveCount);
...
end;

записать чтоб все они шли к TPla?

ну типа как
Procedure TEnemy.DoMove(MoveCount:integer);
Begin
Inherited DoMove(MoveCount);
If X>TPla.X then x:=x-(100 div 60);  //но только TPla сюда не канает
end;

можно конечно сделать глобальную переменную Var Pla_X,Pla_Y:Double;
а потом

Procedure TEnemy.DoMove(MoveCount:integer);
Begin
Inherited DoMove(MoveCount);
If X>PlaX then x:=x-1;  // а без этого можно как нибудь обойтись?
end;

ещё вопрос. Как можно Integer превести в Double и на оборот?


 
Jus   (2004-09-20 06:29) [1]

Ещё вопрос.

Создал я TUnit( к примеру , боевая еденица)
TUnit=class(Sprite: Tsprite)
procedure DoMove(...
procedure DoCollision(...
public
Constructor Create(AParent:TSprite); override;
end;


В процессе программы я создам ещё к примеру 5 TUnit-ов и как мне обращатся к скажем 2-му юниту чтоб он шёл в выбронную мной позицию, ведь пойдут все TUnitы т.к. поля X и Y есть у всех них.
Существует ли индексация этих самых Тспрайтов? Если да то как?

Может в Constructore Create вставить переменную(индекс) чтоли какимто образом:(


 
Jus   (2004-09-20 07:48) [2]

тишина...(

Наверное единственный способ это
enemy:array[0..5] of TEnemy;?


 
Servelat ©   (2004-09-20 08:03) [3]

Полный ответ: RTFM.
Краткий ответ:

> If X>TPla.X then x:=x-(100 div 60);  //но только TPla сюда
> не канает

Как минимум 2 способа. Хранить ссылку на объект типа TPla. При создании:

var
 Pla: TPla;
...
Pla:=TPla.Create(...);
with Pla do
begin
 X:=...
 Y:=...
 //etc.
end;


Далее можно обращаться к полям объекта TPla:
if (Pla.X)>100 then
и т.п.

Однако, если объектов больше одного, хранить ссылки на них нецелесообразно (об этом твой пост № 1). Поэтому есть второй способ:
Спрайты, как это ни удивительно, нумеруются. Доступ к ним осуществляется через DXSpriteEngine.Engine (то, что ты им передал в качестве параметра при создании). Количество спрайтов можно определить так: SE.Engine.Count (при условии, что твой спрайтовый движок называется "SE"). Доступ к конкретному спрайту посредством SE.Engine.Items[Index]. Пример:

var
 i: integer;
...
for i:=0 to SE.Engine.Count-1 do
begin
 if (SE.Engine.Items[i] is TUnit) then
   TUnit(SE.Engine.Items[i]).X:=10;
end;


В вышеприведенном коде идет цикл по всем спрайтам, и если текущий спрайт принадлежит классу TUnit, то его X приравнивается 10.
Таким же образом можно найти в этом списке спрайт класса TPla и обратится к его координатам.

ЗЫ код писал прямо тут, так что могут быть незначительные очепятки/ошибки :) .


 
Jus   (2004-09-20 08:09) [4]

Servelat ©   (20.09.04 08:03) [3]
> var
>  i: integer;
> ...
> for i:=0 to SE.Engine.Count-1 do
> begin
>  if (SE.Engine.Items[i] is TUnit) then
>    TUnit(SE.Engine.Items[i]).X:=10;
> end;

Спасибо!)
> ещё вопрос. Как можно Integer превести в Double и на оборот?
?


 
Jus   (2004-09-20 08:32) [5]

Где взять ссылку на свежую инфу по делфиикс, только пообъемнее, не те, что заезженные. А ХОРОШУЮ.)


 
Jus   (2004-09-20 10:06) [6]

Мне нужно Integer превести в Double и на оборот. Как мне это сделать? помогите!)


 
Jus   (2004-09-20 10:07) [7]

Ну или хотябы Double в String и наоборот?


 
cyborg ©   (2004-09-20 10:10) [8]

В строку:
FloatToString()

В целое:
Trunc()
Round()



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

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

Наверх




Память: 0.46 MB
Время: 0.034 c
6-1098296927
papage
2004-10-20 22:28
2005.01.09
TIDHTTPSERVER, как слить файл


1-1103535409
Neznaika
2004-12-20 12:36
2005.01.09
Приоретет


8-1096665427
Viper
2004-10-02 01:17
2005.01.09
Поиск проги с исходником


9-1094386495
Darthman
2004-09-05 16:14
2005.01.09
Народ помогите с тестированием альфы плиз...


3-1102521643
Goga
2004-12-08 19:00
2005.01.09
Как получить выборку из MSAccess





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