Главная страница
    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.032 c
1-1103706352
Mishenka
2004-12-22 12:05
2005.01.09
Можно ли в ListBox сделать несколько Item ов не активными (типа E


3-1102603979
Dimedrol
2004-12-09 17:52
2005.01.09
MySQL 4.1.7 текст храниться в unicode - как искать ?


1-1103710048
Руслана
2004-12-22 13:07
2005.01.09
Подскажите как грамотно решить следующую задачу


14-1103284367
КаПиБаРа
2004-12-17 14:52
2005.01.09
Различие в типах


8-1096901011
sergvc
2004-10-04 18:43
2005.01.09
Распечатать изображение на принтере





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