Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Проекты на MidletPascal

Ответ
 
Опции темы
Старый 27.11.2008, 21:42   #31
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

ещё неброльшая оптимизация в MIDletPascal, дальше только реализация алгоритма в java. ....ну так как? какие у кого идеи? у меня сейчас логику делать - нету времени...
procedure drawMap;
var  {вывод видимой проекции на экран}
  px,py,dx,dy,k,y1,y2,depth,i,h:integer;
begin
  //h:=map[(y div 1024) and 255, (x div 1024) and 255]+10;
  for i:=8 to 8+sw do
  begin
    px:=x;
    py:=y;
    k:=(angle+1960+i) and 2047;//рисовать проекцию слева и справа от центрального угла
    dy:=sintab[k];
    dx:=costab[k];
    y2:=sh;
    for depth:=1 to 60{#1} do
    begin
      px:=px+dx;
      py:=py+dy;
      k:=map[(py div 1024) and 255, (px div 1024) and 255];
      y1:=(((265{#2}-k)*8{#3}) div depth)+10{#4};  //constant #2 = (#1/#3)+2+h, h=255;  #4 - place for the sky
      if (y1<y2) then  //вертикальная линия цветом "k" от "y1" до "y2" где "i"="x"
      begin
        setColor(cr[k],cg[k],cb[k]);
        drawLine(i,y1,i,y2);
        y2:=y1;
        if y2<=0 then break; //выход если достигли границы экрана, дальше рисовать не имеет смысла
      end;
    end;
    //if y2>0 then begin setColor(0,0,0); drawLine(i,0,i,y2); end;  //fills in a background
  end;
end;
p.s. Если придумать хорошую логику, и переделать в java, будет приемлемая скорость, даже для телефонов Motorola e398,v3,v3i и д.р.
(Offline)
 
Ответить с цитированием
Старый 29.11.2008, 18:13   #32
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: The Maze

Я сейчас сильно занят, когда освобожусь, попытаюсь сделать движок типа Wolfenstein 3D с использованием рэй-кастинга.
(Offline)
 
Ответить с цитированием
Старый 30.11.2008, 20:51   #33
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

спасибо Ром, твой арканойд с классной, интересной логикой!

(по разработке wolf-3D)
В виду ограниченной скорости Z-buffer реализовать не получится, только его частный случай,
вот некоторые приемы отображения спрайтов в псевдо-3D:
после прорисовки всех стен остается массив размером в ширину экрана, и для каждого вертикального столбца в одну точку шириной записывается дистанция до стены.
После расчета положения всех спрайтов, расстояния до них, и, соответственно, масштабирования, при их выводе, если линия пикселей из картинки ближе чем отрезок стены, то выводим его, иначе она за стеной, и мы его не выводим
(Offline)
 
Ответить с цитированием
Старый 01.12.2008, 01:20   #34
FISHY
AnyKey`щик
 
Регистрация: 27.04.2008
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: The Maze

Sorry I don't speak much Russian
--------------------------------------
Basic Raycaster -
Good - it works (mostly)
Bad - Buggy, ugly, no textures and incomplete.
Features - Basic collision detection, movement, sprites, variable depth, full-screen rendering.
Needed: Everything fixed - I don't have time - Look forward to seeing what you come up with. Thanks.
Вложения
Тип файла: zip raycast.zip (13.8 Кб, 795 просмотров)
(Offline)
 
Ответить с цитированием
Старый 04.12.2008, 01:15   #35
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: The Maze

Что ж, будем стараться сделать
(Offline)
 
Ответить с цитированием
Старый 04.12.2008, 06:13   #36
Cliffe Snake
Нуждающийся
 
Аватар для Cliffe Snake
 
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений
(для 12 пользователей)
Ответ: The Maze

Классные движки), молодцы парни. В двиге от Fishy движение относительно камеры под -135 градусов(так выглядит). А в Vox'ельном карта клеится из сгенеренной картинки?
(Offline)
 
Ответить с цитированием
Старый 04.12.2008, 22:05   #37
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

FISHY -
I have made correct 3D algorithm and imposing of the images. Now it is necessary to make logic and opponents.
_____
Сделал текстурирование стен и корректное 3D-изображение.
Необходимо добавить спрайты и логику противников.
Работает довольно быстро.
Выдрал и немножко оптимизировал библиотеку MIDletPascal работы с типом Real (fixed point) числа с фиксированной точкой..
Возможны ошибки.. тестировать было мало времени, просьба оттестировать путем сравнения результатов вычисления в цикле, с оригинальной библиотекой.
_____
Программу легко переделать под java, Ром (Romanzes) пропробуй сделать логику..
Вложения
Тип файла: zip r3d.zip (31.0 Кб, 846 просмотров)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо abcdef за это полезное сообщение:
Cliffe Snake (04.12.2008), Romanzes (04.12.2008)
Старый 04.12.2008, 22:52   #38
Cliffe Snake
Нуждающийся
 
Аватар для Cliffe Snake
 
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений
(для 12 пользователей)
Ответ: The Maze

Abcdef, а можешь дать скомпиленный lib_mathmp?
(Offline)
 
Ответить с цитированием
Старый 04.12.2008, 22:59   #39
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: The Maze

abcdef... Офигенно!!!
Примерно так я это и представлял... Реально круто. Теперь постараюсь в свободное время поработать с твоим движком.
(Offline)
 
Ответить с цитированием
Старый 05.12.2008, 00:22   #40
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

спасибо Рома.
Cliffe Snake - распакуй jar файлик и получишь компиленный class-файл.
___
p.s.: т.к. библиотека работает с типом integer, то необходимо внимательно проводить вычисления, т.е.: все константы и переменные integer-типа переводить в fixed-real через специализированную функцию fIntToReal. Числа с точкой лучше вводить через функцию fStrToReal. Все арифметические действия, кроме суммы и разности также проводить через функции библиотеки fixed-real
(Offline)
 
Ответить с цитированием
Старый 07.12.2008, 00:49   #41
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

Оптимизировал алгоритм 3D-текстурирования.
Проверил функции fixed-point library, немного оптимизировал, некоторые функции возвращают более точные значения, убрал некоторые ошибки стандартной библиотеки. Деление на ноль не вешает java-машину, а возвращает ноль.
Переписал финкцию fStrToReal, теперь запись можно разделять пробелами напр: ' - 123 . 4567', ' + 98765 . 4321'
Вложения
Тип файла: zip r3d.zip (36.2 Кб, 775 просмотров)
(Offline)
 
Ответить с цитированием
Старый 07.12.2008, 02:47   #42
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: The Maze

Тестил пример на эмуле. Когда стенки находятся далеко от камеры, то довольно шустро, а когда близко, очень сильно тормозит, примерно 1fps, а то и 0.5. То есть когда тектура стены во весь экран и таким образом двигаешься, то очень медленно видимо рассчёт большой картинки происходит.Может попробовать картинку раза в четыре меньше взять? И её просто растягивать будет, не на столько чётко будет, но зато будет быстрее рассчитывать наклон в перспективе. Или я не прав?
(Offline)
 
Ответить с цитированием
Старый 07.12.2008, 10:49   #43
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: The Maze

тормозит из-за процедуры plot, чем больше рисовать тем больше plot. Уменьшение текстур не приведет к снижению четкости, просто точки станут больше. Писал программу под легкую переделку в java, если перенести скорость повысится на 50% и более
(Offline)
 
Ответить с цитированием
Старый 07.12.2008, 11:02   #44
Cliffe Snake
Нуждающийся
 
Аватар для Cliffe Snake
 
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений
(для 12 пользователей)
Смущение Ответ: The Maze

На Microemulator'е работает почти без тормозов. На sjboy и NHAL(MidpX) тормоза конкретные, особенно на первом.
Добавил в двиг радар, и ещё по мелочи. (см. ReadMe)
Вложения
Тип файла: zip r3d_1.1.zip (60.8 Кб, 793 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
abcdef (07.12.2008)
Старый 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:49.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com