Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
4-1156701339
AlexKRAM
2006-08-27 21:55
2007.01.07
Программно добавить пользователя Windows


6-1155411966
Logun
2006-08-12 23:46
2007.01.07
Видимость TWebBrowser


15-1166080755
vidiv
2006-12-14 10:19
2007.01.07
Помогите решить задачу по страхованию...


2-1166320824
КВАНТ
2006-12-17 05:00
2007.01.07
Про URL в RichEdit и про Panel (несовместимость?)


15-1166431387
Чапаев
2006-12-18 11:43
2007.01.07
Про IE





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