Ответ: The Maze
Товарищи, а где можно популярно и доходчиво почитать про ray-casting? Все никак не могу с ним разобраться :)
|
Ответ: The Maze
Вот, если кто хочет, покурите исходники оригинального Wolfenstein 3D. Сам я в них разобраться не могу, потому что пока не знаю C++. А я пока займусь переносом двига от abcdef на java. Все-таки я считаю, что нужно юзать png картинки, а не bmp.
|
Ответ: The Maze
Romanzes - в принципе без разницы в каком формате картинки. Помнится что jar-файл поворота картинки был даже больше, чем версия на паскале. Это все из-за файла Gordon.png - он плохо сжимался. А bmp из-за малой палитры лучше упаковывался. Все-таки лучше оставить bmp, потому что с ним легче работать и после загрузки картинок (безразлично в каком формате) остаются только массивы пикселов.
___ Cliffe Snake - текстурирование пола и потолка в 2 раза понизит скорость программы, но есть способ зарисовки удаленным задним фоном зданий/гор/неба, (когда-то придумывал, но он будет работать только c drawRGB),состоит в том что: в массив экрана вводим другой массив со смешением позиции: остаток от деления угола зрения на ширину экрана, таким образом получаем плавную прокрутку заднего фона.. смотрится довольно эффективно,.. ___ Посмотрел "в закромах" нашел алгоритм, который когда-то делал для расчетов и рисования спрайтов. Выкладываю чтоб не изобретали велосипед. Возможно где-нибудь будет неточности, переписывал не проверяя.. ___ Код:
function intSqrt(v : integer) : integer; |
Ответ: The Maze
Вложений: 1
Вот подкрутил радарчик, исправил текстуры, добавил небо. Полный список изменений смотрите в ReadMe.txt :)
|
Ответ: The Maze
Цитата:
|
Ответ: The Maze
Вложений: 1
Cliffe Snake - да,да задний фон примерно так как ты сделал.. но немножко упростил, выглядит так:
Код:
drawimage(sky,-((angle+angle) mod 360),0); ___ Оч. неудобно что MIDletPascal не хочет делать длинные массивы, правильная идея сделать двухмерный :) но думаю на java быстрее будет делать одномерным.. ___ переделал программку с учетом предложений Cliffe Snake ___ давайте для оптимальности будем делать так: 1. вычисления real заменять Lib_mathmp.class. 2. картинки желательно в bmp-формате, и при необходимости png, другие форматы лучше не использовать т.к. не все телефоны их будут поддерживать. 3. карты записывать в текстовом виде, где кубик стены записывается числом, здесь же будем описывать спрайты. |
Ответ: The Maze
Цитата:
Мой способ отображения "неба" более универсален, так как не зависит от размера экрана. :p :) |
Ответ: The Maze
длина картинки заднего фона расчитывается так: угол обзора 60 градусов, равны ширине экрана, значит всего этих экранов будет 6 плюс добавочный, получается длина_картинки = ширина_экрана*7.
запускал на motorola V3i повисло, пришлось уменьшить data [0..6,0..4096] of integer; |
Ответ: The Maze
Цитата:
(то есть 1 градус = 3 пикселям) PHP код:
Кол-во повторений drawimage со двигом на Dlina = 1080/Dlina+1 Проверенно, 100% работает не зависимо от экрана. Цитата:
|
Ответ: The Maze
Вложений: 1
Cliffe Snake - спорим об одном и том же, хотя по идее можно обойтись и картинкой шириной с экран.. нужно как можно более минимизировать кол-во вызовов графических функций.
Текстуры лучше представить одним файлом, на подобии вертикальной киноленты, т.о. будем экономить на каждом файле более 1кб из счет заголовка и палитры, кроме того большой файл упаковывается лучше, чем несколько маленьких. кол-во текстур нужно сократить и подгружать их по ходу игры, например при входе в комнату, но это уже в конце, когда все будет готово.. ___ Интересно как справиться с программой средствами MIDletPascal, а иначе переписал бы за час на java.. Ранее выложил всю необходимую математику спрайтов, кто-нить уже сделал живых человечков? логику можно сделать такой: если догнал - уменьшаются жизни, а еще довольно неплохо смотриться метание огненными шарами (как в DOOM), шар - тот-же спрайт (направление движения (dx,dy) как у игрока в момент создания), который деинициализиреутся когда столкнется с каким-либо предметом. Массив со спрайтами наполовину пуст, для генерации всевозможных дополнительных спрайтов. отработавшие спрайты либо превращаются в статические либо помечаются как пустые и свободные.. ___ p.s. выкладываю редактор спрайтов/текстур для MSDOS-Wolfenshtein3D скопировать в папку с программой и запускать, есть возможность сохранения изображений в формате gif. |
Ответ: The Maze
Вижу, я немного не в тему пишу, еще про maze. Но пдскажите, пожалуйста, как в maze3d сделать так чтоб когда поварачиваешся влево/вправо не поварачивалась и карта (при этом меняются координаты х, у, что очень мешает узнаванию местонахождения на карте). Если не трудно выложите пример в зипе или хотябы просто листинг. Заранее благодарен...
|
Ответ: The Maze
поворот карты, своего рода оптимизация, иначе б в основном алгоритме нужно было рассматривать 4е случая. Получить координаты можно если запомнинать поворот относительно начального, а затем временные_х_у поворачивать обратно
|
Ответ: The Maze
Я в мидлетпаскале относительно не долго, и теоретически знаю как это делается, а на деле чет не выходит. Можно пример?
|
Ответ: The Maze
Вложений: 1
Добавил алгоритм спрайтов, нужно оптимизировать и добавить логику, тогда будет хорошая игрушка. Подобных программ на MP не видел.. Кто возьмется делать логику? у кого есть интересные идеи?
__ p.s. ArtikZ - MIDletPascal это не лучший пособ для первого языка программирования, много ситуаций компиляции и проверки синтаксиса программы не поддается здравому смыслу, например при разработке спрайтов, если они были в записях record, то неправильно считался один из параметров. и если в массивах, то нельзя использовать последний элемент, алгоритм поворота направо t:=x;x:=y;y:=29-t; налево t:=y;y:=x;x:=29-t; смотри какой угол и поворачивай в цикле обратно.. |
Ответ: The Maze
несколько замечаний по использованию вычислений в fixed-point real: числа с фиксированной точкой можно напрямую умножать или делить (если real в делимом, но не наоборот) на integer, а также складывать или вычитать два real-числа обычным сложением или вычитанием, во всех остальных случаях вычисления проводить только через библиотеку, а integer приводить к типу real через fIntToReal
|
Часовой пояс GMT +4, время: 18:50. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot