Форум: "Игры";
Текущий архив: 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