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

Вниз

Что там по трению? :)   Найти похожие ветки 

 
Galiaf ©   (2006-03-02 14:58) [0]

Необходимо реализовать столкновение со стенами, DCE не подойдёт по тому, что в игре происходит установка бомб прямо в позиции игрока и в этом случае игрок застревает при установке бомб(если конечно кто знает как это реализовать в DCE or ODE, говорите). Пробовал делать движение по-своему:

procedure TDataModule1.move(napr: spec);
var
 pp: array[1..4] of byte;
begin
 x:=round(player.Position.x);
 z:=round(player.Position.z);
{  pp[1]:=round(player.Position.x+r);
 pp[2]:=round(player.Position.x-r);
 pp[3]:=round(player.Position.z+r);
 pp[4]:=round(player.Position.z-r);}

 if (player.Direction.x>0) then
   case napr of
     0: pp[1]:=round(player.Position.x+r);
     1: pp[1]:=round(player.Position.x-r)
   end
 else
   case napr of
     0: pp[1]:=round(player.Position.x-r);
     1: pp[1]:=round(player.Position.x+r)
   end;

 if (player.Direction.z>0) then
   case napr of
     0: pp[2]:=round(player.Position.z+r);
     1: pp[2]:=round(player.Position.z-r)
   end
 else
   case napr of
     0: pp[2]:=round(player.Position.z-r);
     1: pp[2]:=round(player.Position.z+r)
   end;

{lev - матрица уровня}

 case napr of
   0: //вперёд
     begin
{        if (pp[1]=x) and (pp[2]=z) then begin
         player.Position.X:=player.Position.X+player.Direction.X/10;
         player.Position.z:=player.Position.z+player.Direction.z/10
       end
       else}
         if lev[pp[1],pp[2]]=-1 then begin
           player.Position.X:=player.Position.X+player.Direction.X/10;
           player.Position.z:=player.Position.z+player.Direction.z/10
         end

     end;
{    1: //назад
     begin
       if lev[x1,z]=-1 then player.Position.X:=player.Position.X-player.Direction.X/10;
       if lev[x,z1]=-1 then player.Position.z:=player.Position.z-player.Direction.z/10
     end;
   2: //влево
     begin
       if lev[x1,z]=-1 then player.Position.X:=player.Position.x+player.Direction.z/10;
       if lev[x,z1]=-1 then player.Position.z:=player.Position.z-player.Direction.x/10
     end;
   3: //вправо}
 end;


В этом случае игра начинает страшно глючить ибо эта процедура запускается в каденсере и из-за большого количества вычислений (по моему) идёт туговато, а если переделывать так чтобы не застревал в бомбе, то вычислений ещё больше. Есть ли у кого идеи?
P. S.
 Процедурка сейчас выглядит плохо, это потому что я её уже много раз переделывал и пока осталась только обработка движения вперёд, и то не такая как надо.


 
VolanD666   (2006-03-03 05:14) [1]

Sphere+triangles


 
Galiaf ©   (2006-03-03 18:06) [2]

Это ты что только что сказал?



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

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.039 c
15-1166515691
vidiv
2006-12-19 11:08
2007.01.07
реклама в бесплатном хостинге


6-1155156432
IrkaShkirka252
2006-08-10 00:47
2007.01.07
Включить программно роутинг


3-1161612134
Winni
2006-10-23 18:02
2007.01.07
Как удалить Co Class ?


2-1166528410
hgd
2006-12-19 14:40
2007.01.07
Перевод кода из VB


2-1166287995
BUHALOSS
2006-12-16 19:53
2007.01.07
Отловить клик мыши