Тема: The Maze
Показать сообщение отдельно
Старый 07.12.2008, 13:16   #45
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

молодец Cliffe Snake, движёк начинает быть похожим на игру.. я старательно избугаю внешних java-библиотек, чтобы показать реализацию программ более простыми (но не всегда эффективными) методами. Если продолжать проект в MIDletPascal, то нужно добавить drawRGB вместо plot(x,y), создать массив спрайтов примерно следующего вида:
TSprite = Record    {Параметры спрайта}
  Id    : Integer;     {классификация спрайта}
  Status: Integer;   {статус спрайта: активный/убит и т.д.}
  X, Y  : Integer;    {Координаты спрайта}
  Dist  : Integer;     {расстояние до спрайта (т.е масштаб его картинки)}
  Ray   : Integer;    {луч центра спрайта относительно экрана}
  Ang   : Integer;    {угол движения спрайта на карте}
  Cnt   : Integer;    {счетчик анимации текстур для спрайта}
  //Racurs: Integer;   {номер картинки поворота}
end;

.......

procedure outTexture(x,y,size,imgNum : integer);
var  {вывод текстуры с масштабированием}
  i,j,xo,yo,coof,offs,color : integer;
begin
  coof := (63*256) div size;
  xo := 0;
  for i := 0 to size-1 do
  begin
    if (size>screenDist[x+i]) then
    begin
      yo := 0;
      offs := imgNum*64*64+(xo shr 8);
      for j := 0 to size-1 do
      begin
        color := data[offs+((yo shr 8) shl 6)];
        if (color<>0) then
        begin
          setColor(....);
          plot(x+i,y+j);
        end;
        inc(yo, coof);
      end;
    end;
    inc(xo, coof);
  end;
end;
для простоты можно делать так, что спрайт всегда повернут к нам "лицом", с какой-бы стороны мы к нему не подходили.

Логика отображения: после прохождения массива спрайтов мы расчитывает положение и размеры каждого из них, а затем при выводе на экран проверяем попадает ли он в угол зрения игрока, и при выводе каждой вертикальной его линии следим чтобы она была больше, т.е. ближе чем линия стены.

Последний раз редактировалось abcdef, 07.12.2008 в 13:22.
(Offline)
 
Ответить с цитированием