Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.09.2012, 00:26
XimiKDeniS вне форума Посмотреть профиль Отправить личное сообщение для XimiKDeniS Найти все сообщения от XimiKDeniS
  № 1  
Ответить с цитированием
XimiKDeniS

Регистрация: Mar 2012
Сообщений: 58
По умолчанию Карта игры

Добрый день. Много времени думаю над вопросом как сделать карту для игры (2d, вид сверху), чтобы было наиболее практично и наименее затратно. Проверка столкновения с объектами должна происходить именно по ней. Изначально делал вовсе без карты, потом заметил, что при большом колличестве объектов проверять в цикле все условия затрудеительно. Пробовал сделать карту из матрицы, но тут тоже проблема, думаю до больших размеров ее не получится увеличить (много будет есть двухмерный массив 1000x1000) Надеюсь кто-нибудь сможет предложить лучшие способы. Заранее спасибо.

Старый 07.09.2012, 01:07
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 2  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Цитата:
при большом колличестве объектов проверять в цикле все условия затрудеительно
вот тут ваша проблема - не нужно проверять все условия для всех объектов в одном цикле - фильтруйте, отбрасывайте заведомо лишние проверки, по типу, по расстоянию, удаляйте то что не попадает в поле зрения.

если вас волнует проверка столкновений - попробуйте посмотреть исходники фрэймворков которые это умею делать, например flixel или box2d

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

что если вместо массива использовать BitmapData и цветом кодировать разные состояния пикселй-клеток?
__________________
Хороший отдых - половина работы.

Старый 07.09.2012, 07:53
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Пробовал сделать карту из матрицы, но тут тоже проблема, думаю до больших размеров ее не получится увеличить
Получится. Можно сделать двумерный массив, в который вставлять целые числа, например 0 - не может ходить, 1 - может.
Как бы поделить игровое поле на квадратики, скажем 20х20, и для каждой клетки в редакторе карт задать значение (это можно сделать создав, например, инструмент рисования препятствий и т.п.).
В итоге должен получиться массив на подобие такого:

Код AS3:
[
[1,1,0,1,1,1,1,1,1,1,0],
[1,1,1,1,1,1,1,1,1,1,0],
[1,1,1,1,1,1,1,1,1,1,0],
[1,1,1,1,1,0,0,1,1,1,0]
]
с количеством вложенных массивов (рядов карты) равным высоте карты / 20, и размерностью каждого вложенного массива равной ширине карты / 20.
Далее при перемещении персонажа брать его положение по x делить на 20 и округлять до меньшего целого, таким образом получая индекс в каком-либо из вложенных массивов, а разделив положение по y на 20 и округлив, так же, до меньшего целого, индекс вложенного массива представляющего ряды.

т.е. потом просто создать функцию, которая будет на основе этих координат возвращать необходимое значение из нужного вложенного массива, 0 или 1. Вернет один - персонаж идет в это положение, 0 - останавливается.
Подобные сетки проходимости довольно часто применяются.
Надеюсь идея понятна

Цитата:
попробуйте посмотреть исходники фрэймворков которые это умею делать, например flixel или box2d
Не самая лучшая идея.
Сложновато это для новичка. А учитывая что бокс2д это еще и порт с С++, в котором не соблюдаются никакие конвенции АС3, задача еще неоднократно усложняется.
Да для такой игры, в общем-то, даже SAT использовать нет необходимости, не говоря уже про физику.

Цитата:
фильтруйте, отбрасывайте заведомо лишние проверки, по типу, по расстоянию
В бокс2д, кстати, перед полноценным просчетом столкновения, используется проверка расстояния, чтобы выявить вообще возможность столкновения. Так что по этому поводу бокс2д упомянут не зря. Но смысла ковырять его исходники нет, о проверке расстояний в нете и так информации полно

Старый 07.09.2012, 17:00
XimiKDeniS вне форума Посмотреть профиль Отправить личное сообщение для XimiKDeniS Найти все сообщения от XimiKDeniS
  № 4  
Ответить с цитированием
XimiKDeniS

Регистрация: Mar 2012
Сообщений: 58
Возможно я неправильно начал. Сама игра клиент-серверная аркада(персонаж, монстры и т д проходится вместе), и сама карта должна быть соответсвенно на сервере. Матрица не подходит почему, потому что если есть объект, значит он должен быть в этой матрице подкаким-нибудь id например, чтобы узнать, что это за объект. А сама карта должна быть, как я уже говорил по 1000x1000 пикселей (хотя хотеось бы и больше). Сам раньше делал тот вариант, что предложили, правда с делением на 5, но опять же размер получается большой и меня это настараживает.

Старый 07.09.2012, 18:11
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 5  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
Карта делится на области, напимер 100 на 100 пикселей. Каждый объект входит в 1 зону и проверяется на столкновение с объектами из соседних зон и своей собстенной. Т.е. всего проверяется 9 зон. Размер зоны определяется как максимально возможная длина объекта.
Если есть ещё и статика (просто карта проходимости, не объекты) - можно её отдельно положить и проверять каждый объект с ней. Формат карты проходимости при этом зависит уже от того, что за игра.


Последний раз редактировалось botbot; 07.09.2012 в 18:24.
Старый 07.09.2012, 22:07
XimiKDeniS вне форума Посмотреть профиль Отправить личное сообщение для XimiKDeniS Найти все сообщения от XimiKDeniS
  № 6  
Ответить с цитированием
XimiKDeniS

Регистрация: Mar 2012
Сообщений: 58
Неплохой вариант, спасибо. Если не будет еще что-нибудь более интересного буду использовать это))

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.