Главная страница
    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.47 MB
Время: 0.035 c
3-1102576934
Elena
2004-12-09 10:22
2005.01.09
IBSecurityService в interbase


4-1101068149
Alexey Romanskiy
2004-11-21 23:15
2005.01.09
Заставить винду перечитать параметры из реестра


14-1103455952
Cerberus
2004-12-19 14:32
2005.01.09
Самарцам


9-1095646679
Jus
2004-09-20 06:17
2005.01.09
DelphiX и спрайты.


1-1103729274
Unknown user
2004-12-22 18:27
2005.01.09
Как активировать MDIChildlen[N]?





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