Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2015, 11:50   #1
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию Двумерные массивы

Есть набор получаемых в программу данных от перемещения персонажа, при которых он контролирует массив и клетки отдельные Rect- области (я показал сеткой на картинке) окружающие себя самого.

Переписал обработку столкновений таким образом что после каждого смещения персонажа идет цикл проверки на пересекающиеся области прямоугольника персонажа с прямоугольниками в сетках.

Добавил пока писал пост кнопку внизу для проверки пересечений

И вот вопрос что делать после нахождения нужного пересечения с персом?

Изменить значения массива и перерисовать поклеточно всю карту?
Перерисовать только ту клетку с которой столкнулся из массива
Перерисовать только ту клетку с которой столкнулся канвой не меняя массив
Или просто заменить нужную клетку на клетку "обозначающую" пустоту?
Или что делать?
Изображения
Тип файла: jpg 1111.jpg (99.8 Кб, 141 просмотров)
Тип файла: jpg 2222.jpg (127.5 Кб, 145 просмотров)
Тип файла: jpg 3333.jpg (121.3 Кб, 133 просмотров)
Вложения
Тип файла: rar Прога_тест_2.rar (290.4 Кб, 8 просмотров)

Последний раз редактировалось NIKOLAYY2; 01.02.2015 в 11:55.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 01.02.2015, 11:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Интересный вопрос... А что по сценарию перс должен делать, столкнувшись с препятствием?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2015, 12:12   #3
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Stilet
Ну вот кабы сценарии разные будут, взависимости от того с какой клеткоймассива он столкнулся, я их опишу потом в коде в данном случае он столкнулся со значением g для этого случая будет такой сценарий:

Заменить значение (монета) g на (пустую клетку минусик знак) -
Добавить персу один бал.

И все таки я пришел к выводу значение в массиве мы меняем! так как перс с этой же монетой может столкнуться еще раз, и заработать еще балл а это уже ненужно.

Для других значений массива будет другой сценарий, встретился с колючкой (фигура m по массиву) забираем одну жизнь у перса (тогда вроде как и ненадо значение в массиве менять, пускай еще раз сталкивается, ну до 3 раз например) или для простоты сценария сразу написать конец игры и тд..

Я ни разу подобных игр неписал, и в гугле подобные видел только для С++ и ни одной на делфи!
Поэтому надо восполнить частично хоть как то этот пробел )

Придерживаюсь таких правил-

Простота реализации,
Никаких жестких привязок (нарисовал лабиринт из стен) и сразу могу ходить по сцене и упираться в них! Эта функция уже так работает в моем проекте.
Ну и мобильность, надоела игра - перерисовал любые другие спрайты, тайлы, оформил новые события на разные столкновения и получил новую игру.

Последний раз редактировалось NIKOLAYY2; 01.02.2015 в 12:19.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 01.02.2015, 12:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я конечно не в курсе как и что ты там делаешь (прогу твою не смотрел) но я бы сделал так: Каждый объект в игре пусть будет унаследован от некоего базового класса, в котором есть общие абстрактные методы. В них для каждого типа я бы описал что делать, если перс или другой объект взаимодействует с ними.
Таким образом перс при ходьбе проверяет какой из объектов с ним рядом по курсу его следования и запускает этот метод этого объекта, передавая ему ссылку на себя. Понял идею? Не перс анализирует что вокруг него, а сам объект, с которым у него интерференция случилась.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2015, 06:59   #5
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Код:
Понял идею? Не перс анализирует что вокруг него, а сам объект, с которым у него интерференция случилась.
Примерно понял, а что если сделать цикл в котором все и крутится, например на свойство "гравитация" персонажа.


Этот цикл будет крутится в игре постоянно независимо от того как идет основной процесс игры. Этот цикл и будет постоянно прижимать персонажа к "земле" если тот на данный момент находится в воздухе (кончилась под ногами земля, сделал прыжок) нужно вернуть персонажа на место.

На этот цикл и можно будет повесить основные события такие как обновление изображений "плиток" на экране- значения которых будут браться из основной матрицы и тем самым будет обновляться игра?

Какие движки может для формирования физики игры использовать или хороших нету для делфей?

Последний раз редактировалось NIKOLAYY2; 03.02.2015 в 07:04.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 03.02.2015, 07:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да постоянно цикл не обязательно. Вычислять можно если перс двигается или если есть движение рядом располагающихся объектов. Это как по мне.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2015, 10:34   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Не могу глядеть, как товарищ мучается.
Уж и так и эдак ему намекаю изучать пусть велосипеды, но готовые, в разделе создания игр, а товарищ всё упирается..
Ну вот очень конкретный пример для изучения http://programmersforum.ru/showpost....5&postcount=37
может хоть с ним будет меньше вопросов по простым вещам.
И да, плодить темы тут, когда есть специальный раздел - моветон.

Физ движков хоть для дельфи хоть не для дельфи - уйма, пройдите в гугл , там легко найти например box2d с биндами для дельфи и даже статьи видел.
Но лично я сомневаюсь, что тут физдвижки помогут, аркада это не то (ну очень редко только), для чего актуально брать физдвижок.

Последний раз редактировалось phomm; 03.02.2015 в 10:37.
phomm вне форума Ответить с цитированием
Старый 03.02.2015, 14:11   #8
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Stilet
Код:
Да постоянно цикл не обязательно. Вычислять можно если перс двигается или если есть движение рядом располагающихся объектов.
Спасибо, согласен перепишу код на проверку соседних 9 клеток (так как персонаж неможет столкнуться более чем с 9 клетками то и лишние проверять не стоит, блиин тяжело будет такой цикл сделать где это все учесть- но будем стемиться к этому!)

phomm
Цитата:
Уж и так и эдак ему намекаю изучать пусть велосипеды, но готовые, в разделе создания игр
Для вас -это велосипеды, а для новеньких огого еще...
Спасибо, очень хороший пример в архиве, - это ваш проэкт?
Я постараюсь в нем разобраться
NIKOLAYY2 вне форума Ответить с цитированием
Старый 03.02.2015, 14:19   #9
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

А пока я хотел задать еще такой вопрос:
Есть некая карта, с 200 ячейками которые обновляются 25 раз в сеукунду при помощи таймера.
Это не слишком ли долгий процесс для компьютера?

Если это норм- тогда пойду дальше по этой же схеме.
Если нет то буду искать альтернативы, например игровую площадь для расчета делать в половину высоты игровой платформы и там и просчитывать все варианты взаимодействия, а сверху просто расположить фон?

Ваши советы?
Изображения
Тип файла: jpg 2222.jpg (103.1 Кб, 73 просмотров)

Последний раз редактировалось NIKOLAYY2; 03.02.2015 в 14:22.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 04.02.2015, 07:49   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Проект, ну с моей помощью делал парень - автор той темы, я приложил немало усилий чтобы проработать мелочи и в целом там организовал стройную структуру для работы. Хотя там полно косяков тоже - торопились и я старался не усложнять, а пилить преимущественно "по живому", что в любом случае не делает код лучше.

Вообще такие проекты надо делать в 2 как бы этапа, сперва основу, например, систему с классом игры с хранением графбуфера (даблбуфферинг) и реакцией на мышку+клаву с обработкой в таймере (внутренний массив состояний кнопок клавы и мыши), плюс по возможности менеджер ресурсов (банк текстур хотя бы), и вот уже после этого непосредственно игру, которая будет общаться с этим игровым классом, использовать таймерные тики для обновления состояния своих объектов (с проверкой клавы и мыши), и прорисовки отдельных объектов на буфер.
По событию формы OnPaint и в конце таймерного тика буфер выводить на экран.
Этот подход потом вполне несложно можно задействовать для оптимизации в виде работы с кусками фона (подложки из фона под игровые объекты), чтобы не перерисовывать всё на буфере каждый тик.
А вообще этот подход позволит один раз написать "системный" код и в удобном виде сделать "интерфейс" взаимодействия для игрового кода, который будет аккуратно отдельно прописан, и даже несколько игр можно так создать, не переписывая "системный" ккусок.

Подобный подход (только в ещё более сложном виде) используется тут http://programmersforum.ru/showpost....&postcount=169

Последний раз редактировалось phomm; 04.02.2015 в 07:53.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
Двумерные массивы 1Dima Помощь студентам 2 29.05.2011 13:57
ДВУМЕРНЫЕ МАССИВЫ rhbcnbyf Паскаль, Turbo Pascal, PascalABC.NET 2 09.06.2010 08:36