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

Вниз

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

Наверх




Память: 0.48 MB
Время: 0.029 c
9-1094833835
_Дельфин_
2004-09-10 20:30
2005.01.09
Спрайты и канва


14-1103189033
Кот Бегемот
2004-12-16 12:23
2005.01.09
Margaritas ante porcas


8-1096993960
dron-s
2004-10-05 20:32
2005.01.09
Размер картинки


4-1100687524
z0ne
2004-11-17 13:32
2005.01.09
Размеры страницы принтера


1-1103742624
Capital
2004-12-22 22:10
2005.01.09
Своя область на контрол-панэл