|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.02.2015, 11:50 | #1 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
Двумерные массивы
Есть набор получаемых в программу данных от перемещения персонажа, при которых он контролирует массив и клетки отдельные Rect- области (я показал сеткой на картинке) окружающие себя самого.
Переписал обработку столкновений таким образом что после каждого смещения персонажа идет цикл проверки на пересекающиеся области прямоугольника персонажа с прямоугольниками в сетках. Добавил пока писал пост кнопку внизу для проверки пересечений И вот вопрос что делать после нахождения нужного пересечения с персом? Изменить значения массива и перерисовать поклеточно всю карту? Перерисовать только ту клетку с которой столкнулся из массива Перерисовать только ту клетку с которой столкнулся канвой не меняя массив Или просто заменить нужную клетку на клетку "обозначающую" пустоту? Или что делать? Последний раз редактировалось NIKOLAYY2; 01.02.2015 в 11:55. |
01.02.2015, 11:53 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Интересный вопрос... А что по сценарию перс должен делать, столкнувшись с препятствием?
I'm learning to live...
|
01.02.2015, 12:12 | #3 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
Stilet
Ну вот кабы сценарии разные будут, взависимости от того с какой клеткоймассива он столкнулся, я их опишу потом в коде в данном случае он столкнулся со значением g для этого случая будет такой сценарий: Заменить значение (монета) g на (пустую клетку минусик знак) - Добавить персу один бал. И все таки я пришел к выводу значение в массиве мы меняем! так как перс с этой же монетой может столкнуться еще раз, и заработать еще балл а это уже ненужно. Для других значений массива будет другой сценарий, встретился с колючкой (фигура m по массиву) забираем одну жизнь у перса (тогда вроде как и ненадо значение в массиве менять, пускай еще раз сталкивается, ну до 3 раз например) или для простоты сценария сразу написать конец игры и тд.. Я ни разу подобных игр неписал, и в гугле подобные видел только для С++ и ни одной на делфи! Поэтому надо восполнить частично хоть как то этот пробел ) Придерживаюсь таких правил- Простота реализации, Никаких жестких привязок (нарисовал лабиринт из стен) и сразу могу ходить по сцене и упираться в них! Эта функция уже так работает в моем проекте. Ну и мобильность, надоела игра - перерисовал любые другие спрайты, тайлы, оформил новые события на разные столкновения и получил новую игру. Последний раз редактировалось NIKOLAYY2; 01.02.2015 в 12:19. |
01.02.2015, 12:49 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я конечно не в курсе как и что ты там делаешь (прогу твою не смотрел) но я бы сделал так: Каждый объект в игре пусть будет унаследован от некоего базового класса, в котором есть общие абстрактные методы. В них для каждого типа я бы описал что делать, если перс или другой объект взаимодействует с ними.
Таким образом перс при ходьбе проверяет какой из объектов с ним рядом по курсу его следования и запускает этот метод этого объекта, передавая ему ссылку на себя. Понял идею? Не перс анализирует что вокруг него, а сам объект, с которым у него интерференция случилась.
I'm learning to live...
|
03.02.2015, 06:59 | #5 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
Код:
Этот цикл будет крутится в игре постоянно независимо от того как идет основной процесс игры. Этот цикл и будет постоянно прижимать персонажа к "земле" если тот на данный момент находится в воздухе (кончилась под ногами земля, сделал прыжок) нужно вернуть персонажа на место. На этот цикл и можно будет повесить основные события такие как обновление изображений "плиток" на экране- значения которых будут браться из основной матрицы и тем самым будет обновляться игра? Какие движки может для формирования физики игры использовать или хороших нету для делфей? Последний раз редактировалось NIKOLAYY2; 03.02.2015 в 07:04. |
03.02.2015, 07:38 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Да постоянно цикл не обязательно. Вычислять можно если перс двигается или если есть движение рядом располагающихся объектов. Это как по мне.
I'm learning to live...
|
03.02.2015, 10:34 | #7 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Не могу глядеть, как товарищ мучается.
Уж и так и эдак ему намекаю изучать пусть велосипеды, но готовые, в разделе создания игр, а товарищ всё упирается.. Ну вот очень конкретный пример для изучения http://programmersforum.ru/showpost....5&postcount=37 может хоть с ним будет меньше вопросов по простым вещам. И да, плодить темы тут, когда есть специальный раздел - моветон. Физ движков хоть для дельфи хоть не для дельфи - уйма, пройдите в гугл , там легко найти например box2d с биндами для дельфи и даже статьи видел. Но лично я сомневаюсь, что тут физдвижки помогут, аркада это не то (ну очень редко только), для чего актуально брать физдвижок. Последний раз редактировалось phomm; 03.02.2015 в 10:37. |
03.02.2015, 14:11 | #8 | |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
Stilet
Код:
phomm Цитата:
Спасибо, очень хороший пример в архиве, - это ваш проэкт? Я постараюсь в нем разобраться |
|
03.02.2015, 14:19 | #9 |
Форумчанин
Регистрация: 23.12.2014
Сообщений: 220
|
А пока я хотел задать еще такой вопрос:
Есть некая карта, с 200 ячейками которые обновляются 25 раз в сеукунду при помощи таймера. Это не слишком ли долгий процесс для компьютера? Если это норм- тогда пойду дальше по этой же схеме. Если нет то буду искать альтернативы, например игровую площадь для расчета делать в половину высоты игровой платформы и там и просчитывать все варианты взаимодействия, а сверху просто расположить фон? Ваши советы? Последний раз редактировалось NIKOLAYY2; 03.02.2015 в 14:22. |
04.02.2015, 07:49 | #10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Проект, ну с моей помощью делал парень - автор той темы, я приложил немало усилий чтобы проработать мелочи и в целом там организовал стройную структуру для работы. Хотя там полно косяков тоже - торопились и я старался не усложнять, а пилить преимущественно "по живому", что в любом случае не делает код лучше.
Вообще такие проекты надо делать в 2 как бы этапа, сперва основу, например, систему с классом игры с хранением графбуфера (даблбуфферинг) и реакцией на мышку+клаву с обработкой в таймере (внутренний массив состояний кнопок клавы и мыши), плюс по возможности менеджер ресурсов (банк текстур хотя бы), и вот уже после этого непосредственно игру, которая будет общаться с этим игровым классом, использовать таймерные тики для обновления состояния своих объектов (с проверкой клавы и мыши), и прорисовки отдельных объектов на буфер. По событию формы OnPaint и в конце таймерного тика буфер выводить на экран. Этот подход потом вполне несложно можно задействовать для оптимизации в виде работы с кусками фона (подложки из фона под игровые объекты), чтобы не перерисовывать всё на буфере каждый тик. А вообще этот подход позволит один раз написать "системный" код и в удобном виде сделать "интерфейс" взаимодействия для игрового кода, который будет аккуратно отдельно прописан, и даже несколько игр можно так создать, не переписывая "системный" ккусок. Подобный подход (только в ещё более сложном виде) используется тут http://programmersforum.ru/showpost....&postcount=169 Последний раз редактировалось phomm; 04.02.2015 в 07:53. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Одномерные массивы, двумерные массивы, строки | 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 |