Текущий архив: 2006.12.24;
Скачать: CL | DM;
Вниз
Реализация карты (2D ) Найти похожие ветки
← →
Просто_Я (2006-02-23 18:59) [0]Вот хочу написать бродилку (двухмерную, вид сверху (Вроде GTA1)). Использую DelphiX.
Вот как лучше сделать карту и как лучше ее "двигать". Т.е я нажимаю вперед и как показать новую часть карты (которую я начал видеть), ведь не перерисовывать же ее всю.
Объяснил как мог. Заранее спасибо.
← →
KreeS © (2006-02-23 19:18) [1]вот что-то типа такого...
type
Camera = record
X, Y, //верхний-левый угол камеры на карте
W, H, // ширина, высота камеры (все в ячейках)
Speed: Integer;
end;
там где отрисовываешь карту...
for i := Camera.Y to Camera.Y+Camera.H do
for j := Camera.X to Camera.X+Camera.W do
нарисовать_ячейку(i, j);
а когда жмешь на стрелки делай...
Camera.X := Camera.X + Camera.Speed;
екарный бабай, да примеров везде навалом! :)
← →
grisme © (2006-02-23 20:02) [2]Предлагаю свой пример: делишь всю карту(картинка, допустим) на куски. И эти куски подгружаешь по степени надобности...
000
0X0
000
X-кусок, который сейчас виден. 0-зона которая хранится в памяти(для устранения дерганности при подгрузе). Так и делается...
← →
Просто_Я (2006-02-23 20:53) [3]Подгружая карту, как в [1], мы не пользуемся тем, что у нас уже отрисована большая часть карты и вместо полоски в несколько пикселей рисуем большой участок. Нельзя ли использовать это преимущество?
Или я опять торможе не по-детски? :)
← →
KreeS © (2006-02-23 21:09) [4]Не пойму про что ты?
PS. В моем примере карта не подгружается, а рисуется прямоугольная область ячеек размером с камеру из уже загруженной карты, находящейся в двумерном массиве в памяти. Надеюсь это понятно? :)
← →
n0p © (2006-02-23 21:12) [5]Можно конечно всё, но при этом мы будем перемещать изображение, что тоже не самый быстрый вариант (хотя конечно быстрее), а ты ведь хочешь сделать подобие гта и поэтому изображение может менятся (проехала машина или изометрические здания стали выглядеть по другому) и такие изменения сложно уловить и "дорисовать".
← →
KreeS © (2006-02-23 22:33) [6]Естественно, надо перерисовывать весь экран поновой в каждом кадре, подругому сделать не получится, ведь кроме едущих машин есть еще и анимация. К тому же ИМХО нет разницы по скорости в рисовании картинки размером 800х600 одним куском сразу или сотней кусков, но поочереди.
← →
grisme © (2006-02-24 05:07) [7]
> куском сразу или сотней кусков, но поочереди.
Ну это если ВСЕ куски рисовать. А нах нам рисовать их ВСЕ?=) Можно не рисовать невидимые. =)
← →
SDV © (2006-02-24 10:10) [8]Обычно карта хранится в двумерном массиве записей и выводится кускаим(тайлами) размером 32x32, 64x64 и т.д. При скролле экрана проще перерисовать всю карту. Естественно нужно предусмотреть алгоритм отсечений тех тайлов, которые не входят в границы экрана. А вообще все объекты на экране лучше перерисовывать постоянно в бесконечном цикле, иначе очень трудно предусмотреть все возможные изменения(например движние курсора). Хотя по своему опыту скажу, что DelphiX для этих целей не всегда подходит, на некоторых видеокартах начинаются необъяснимые тормоза именно
при выводе большого количества тайлов.
← →
Unsigned © (2006-02-24 10:35) [9]
> К тому же ИМХО нет разницы по скорости в рисовании картинки
> размером 800х600 одним куском сразу
ИМХО разница как раз есть, 1 вариант быстрее ( ну в ДД так точно есть).
Я когда-то делал примерно так как предложил KreeS в посте [1]. По моему вполне нормальное решение.
> Естественно, надо перерисовывать весь экран поновой в каждом
> кадре, по-другому сделать не получится
Ну конечно можно еще попробовать реализовать технологию DirtyRects, но там действительно надо будет помучаться, и делать это стоит только для довольно слабых машин.
← →
Просто_Я (2006-02-24 12:57) [10]Ну с ГТА я сравнил, конечно, зря -- еще не настолько силен (совсем не настолько). Буду действовать, как было сказано в [1]. Но вот вопрос: У меня есть спрайт персонажа + спрайты других людей и спрайт фона.
Вот отрисовывая карту мне нужно, по-моему, изменять этот спрайт (или можно проще?) и обращаться к нему для рисования, так вот как это сделать, ведь у него, вроде, нет свойства canvas и как мне рисовавать на нем? Да и других людей двигать с фоном тоже надо. Хотя, вот сейчас понял -- следует создать какие-нибудь глобальные координаты для каждого объекта? Но основной вопрос, все-таки, как перерисовывать фон (именно технически, идею вроде уловил)?
PS И еще, если можно, дайте ссылку где посмотреть исходники несложных игр такого типа.
Огромное спасибо
← →
KreeS © (2006-02-24 16:23) [11]Если ты пишешь на ДелфиХ, то особой запарки у тебя быть не должно. Почитай инфу или справку по ней, там есть встроенные средства и для карты и для спрайтов и вообще для всего, что может потребоваться игре подобного уровня, изобретать тебе ничего не придется. Исходники были на этом сайте или на http://delphigfx.mastak.ru/
Страницы: 1 вся ветка
Текущий архив: 2006.12.24;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c