![]() |
Ответ: Vivo
Я все же решил сделать по-другому. Переделаю игру в 3D, и вместо картинок будут спрайты, чтобы не изобретать велосипед.
|
Ответ: Vivo
Nikich, всегда в таких случаях двигается камера(точнее - это манипуляции с матрицами). В 2D камерах ортогональная проекция.(в Blitz3D вроде тоже есть ортогональный режим.).Вот и все различия. Как раз и спрайты пригодятся.
|
Ответ: Vivo
ну не знаю, ничего о камерах в 2Д в блитце я не слышал. Может есть сторонние библиотеки, но я ими не пользуюсь.
|
Ответ: Vivo
есть origin x,y или как то так команда попробуй ее
но в этом случае гуи и персонаж надо ценровать отсноительно сдвига ) |
Ответ: Vivo
Цитата:
Это реализуется двумя-тремя операторами. Дано: -блоки, каждый имеет свои координаты относительно точки отсчета (0,0). Эти координаты изменяться НЕ БУДУТ. -игрок, который тоже имеет координаты, относительно точки отсчета (0,0). -воображаемая камера которая должна: --висеть над тем местом, которое задано ее координатами (относительно точки отсчета (0,0)) --показывать соответствующие блоки Координаты игрока будут совпадать с координатами камеры, в случае жесткой привязки (тогда игрок будет всегда по центру экрана) Или немного плавать относительно координат камеры, если нужна плавная смена направления (камера "летает" за игроком). Заводим две переменные: camera_x, camera_y Все, осталось последнее - модифицировать то место программы, которое отвечает за рисование блоков на экране. Ты ведь не рисуешь все блоки подряд? Ты наверняка рисуешь только те, которые должны быть видны на экране. Вроде: Код:
If block.x>0 and block.x<640 then Код:
If block.x>camera_x and block.x<(camera_x+640) then |
Ответ: Vivo
Гм. А какой способ лучше? Через origin короче, но двигать начало системы координат подозрительно.
Хотя команды "БыстроМнеКамеруЗапилил()" явно не хватает. UPD И почему координаты ГГ должны совпадать с координатами камеры? Ведь тогда игрок за экран сможет убежать. |
Ответ: Vivo
Цитата:
|
Ответ: Vivo
Кстати, все еще требуется помощь в создании сайта.
|
Ответ: Vivo
Самое простое делать через Origin. Делаешь для карты Origin(scrollX, scrollY), а для гуи возвращаешь в начало Origin(0,0).
|
Ответ: Vivo
Вложений: 1
Опять проблемы. Что-то они зачастили. Возможно, вы слышали о такой игре ProjectZomboid, если инет, скачайте и поиграйте она того стоит. Но не в этом дело. Поговорив с геймдизайнером, мы пришли к мнению, что графику стоит сделать изометрическую. И сразу же возник вопрос. Это довольно трудно объяснить тем кто не играл, но я попробую. У нас есть одна стена, через неё пройти мы не можем. Если мы расположим ее на одном тайле, то всё прекрасно и понятно, но тогда она будет уж слишком толстой. Разработчики этой игры думали также, и сделали стены идеально плоскими, разместив их между(!) тайлами. То есть их ширина равна одному пикселю. В этом и есть вопрос: как же тогда делать коллизию, если она не занимает не один тайл? Если я не смог объяснить, поиграйте в эту игру и попробуйте обойти стены домов, тогда станет понятно.
|
Ответ: Vivo
ну сделать проверку пересечений линия :) если правильно понял
(про стенки) ? |
Ответ: Vivo
Не, это муторно. Тогда придется в основании каждой стенки рисовать еще линии. Должно быть что-то проще.
|
Ответ: Vivo
Мне такой вариант подумался.
Сделать плитки объектами (Type), задать им свойства "наличие стенки на краю плитки" по четерём направлениям. (id тайла тоже сюда, если уместно) Field walls%[4] ;0 - нет стены, 1 - есть А потом, когда игрок решит покинуть текущую плитку (curCell), делать проверку стенки в нужном направлении (direction). if(curCell\walls[direction]<>0) Return ;есть стена, никуда не двигаемся direction = {0,1,2,3} - заранее заданные константы направления, 0 например вверх и далее по часовой стрелке (как уж условишься сам). |
Ответ: Vivo
Так тоже не катит. Этот способ хорош, если ГГ пытается перейти с клетки со стенкой на свободную клетку. А если наоборот то фиг. Тогда придется еще просчитывать какая у него следующая клетка.
|
Ответ: Vivo
Ну так у клетки на которой стоит человечек тоже можно прописать этот параметр для той же стенки. Только надо еще отдельно хранить где-то массив этих стенок, ведь они могут быть разных типов (камень, кирпич, дерео, дверь, окно и т.д.)
|
Часовой пояс GMT +4, время: 10:42. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot