|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
|
Программа "Путеводитель по учебному заведению"21.01.2013, 16:55. Показов 6924. Ответов 56
Метки нет (Все метки)
Создана с целью продолжения затронутой темы про графику (Начало тут: Анимированное изображение в RAD Studio 2010 )
0
|
|
| 21.01.2013, 16:55 | |
|
Ответы с готовыми решениями:
56
Дайте комментарии к учебному коду Консультация по учебному курсу для Linux-a Путеводитель по разделу |
|
|
|
| 21.01.2013, 16:57 | |
|
1
|
|
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
|
| 21.01.2013, 17:52 [ТС] | |
|
Вы не так поняли, это продолжение существующей темы, мне модератор запретил дальше в старой обсуждать интересующие меня проблемы, т.к. это не вписывается в тему "Анимированное изображение в RAD Studio 2010". А за ссылку спасибо, но уже читал)
Добавлено через 14 минут Deimon, за время вашего отсутствия я столкнулся с рядом новых проблем и вопросов, которые хотел бы обсудить. 1) Дело дошло до отображения на форме этажа. Мне очень хотелось бы реализовать "хождение" по этажу, отрисовывая только его часть (ну как это делается в мобильных играх: человечек подходит ближе к краю экрана, и карта сдвигается, становится видно куда идти дальше). Вот только как это делать - ума не приложу... 2) Когда этаж будет готов (когда я дорисую изображение), нужно будет предотвращать хождение сквозь стены. Тут 2 варианта: либо определение цвета пикселя, либо регионы о которых Вы говорили. Плюсом в опред. цвета пикс. является простота процесса, а минусом то, что получить цвет можно только левым верхним углом человечка (изображения). На счет регионов - пытался искать какую то инфу, но все время натыкаюсь на формы в виде кругов и многоугольников.... Помогите мне пожалуйста в решении этих вопросов, т.к. они стопорят весь процесс разработки Просьба ко всем, кто так или иначе сталкивался с подобного рода задачами и вообще с разработкой игр, игровых приложений, кидать по возможности полезную информацию, ссылки, темы, т.к. это будет в помощь всем начинающим
0
|
|
|
|
||||||
| 21.01.2013, 18:10 | ||||||
|
1. Реализовать класс камеры.
2. Я делал двоичный массив, и проверял так: X, Y - позиция персонажа MoveMap[50][50] - двоичный массив заполненный 0 и 1. 0 - нельзя идти, 1 - можно. abs - вернет целую часть от деления. 327 / 32 = 10 Как найти ячейку в которой сейчас персонаж? Нужно текущую координату разделить на размер спрайта. +-14 - это центрирования координаты относительно центра изображения игрока
1
|
||||||
|
|
|
| 22.01.2013, 00:08 | |
|
Список полезных/интересных тем и решение необычных задач
Раздел: Создание игр, программирование графики
1
|
|
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
||||||
| 22.01.2013, 20:29 [ТС] | ||||||
|
Avazart, пока что все имеет вид 2D. Как только сдам диплом, буду знакомится и с 3D, т.к. темы очень интересные. Но если у Вас есть что то и про 3D, можете выложить, я с удовольствием ознакомлюсь)
QVO, подскажите пожалуйста: 1) как вы создали событие
0
|
||||||
|
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
||||||||||||||||||||||||||||||||
| 05.02.2013, 09:33 | ||||||||||||||||||||||||||||||||
|
HRGN регионы
Пример: прямоугольная область 4 на 4 пикселя займет 1 TRect, а та же область повернутая на 45 градусов займет как минимум 7 TRect'ов. Третья не маловажная и грустная информация, - регионы хранятся не в оперативной памяти, а в специально отведенной для виндус памяти. Точного объема я так и не узнал, но вроде как он не превышает и сотни мегабайт. Поэтому, не стоит делать огромные регионы, значительно превышающие максимальное разрешение монитора, лучше дробить на несколько регионов. 1. Объявление региона
Это обязательно по завершению каждого использования. Как и с оператором new.
Вам понадобится проверка на пересечение с регионами, поэтому вот набор полезных методов: Проверка на вхождение точки в регион.
NULLREGION - полученный регион пустой (тоесть пересечений нет) SIMPLEREGION - регион состоит из одного прямоугольника (тоесть пересечение есть) COMPLEXREGION - регион состоит из нескольких прямоугольников (опять же, пересечение) ERROR - ошибка при создании региона. (Если что-то не получается и регионы у Вас не работают, советую поставить проверку на получение такой ошибки, возможно что-то не правильно объявили или потеряли указатель. Для использования этого метода, помимо двух регионов, которые надо проверить, придеться создать третий регион, который Вы будете передавать в качестве параметра hrgnDest. Он обязательно должен быть инициализирован. Например HRGN tempRgn = CreateRectRgn(0,0,0,0); Этого вполне достаточно. А по окончанию работы с ним, не забудьте удалить.
1
|
||||||||||||||||||||||||||||||||
|
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
||||
| 05.02.2013, 10:12 | ||||
|
Не по теме: В последнем сообщении, я прикрепил примитивный пример того, что Вам нужно (example.rar) (камера, карта, столкновения) Другое дело, если как в более старых мобильных играх, где карта размерами с экран мобильного телефона, и когда персонаж доходит до конкретного места, то загружается другой кусок карты, и персонаж перемещается на противоположный край. В таком случае, я не вижу необходимости в реализации камеры. Круги и многоугольники вам врятли понадобятся (разве что прямоугольник(CreateRectRgn(x1,y1,x2,y2) , чтобы создать пустой регион или область стены). Но вот создание региона по точкам, - вполне годный инструмент для описания сложных фигурных форм в 2D (CreatePolygonRgn(...) с методом создания региона WINDING).
1
|
||||
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
|
| 24.02.2013, 19:11 [ТС] | |
|
Здравствуйте Deimon. Огромное спасибо регионы, многое теперь стало понятным. И отдельное спасибо за sample, особенно за камеру!) Простите что долго не заходил, вообще не было времени...(
Касательно регионов: Не поймите меня неправильно, но - больше узнав о них, у меня возникло больше сомнений об их использовании. Я с огромным удовольствием и не задумываясь использовал бы их, если бы это был не диплом. Вот один из 6 этажей который необходимо нарисовать в разрешении, раза в 4-5 больше чем в примере: Я конечно же не отбрасываю категорично использование регионов в проекте, думаю будут места где они понадобятся. И если я буду рисовать каждую стену как регион, то 6-й этаж я закончу к новому году, не раньше=) (если, конечно же, я не ошибаюсь). И мне кажется единственным способом, (опять же, могу ошибаться), решения данной задачи через регионы в поставленные сроки - это создание некоего редактора карты, в котором можно будет эти регионы рисовать и сохранять координаты их позиций и само размещение, по другому я себе этого не представляю. Но, конечно же, это очень сложный и трудоемкий процесс, тем более пока что и не для моего ума (если это вообще реально)... По этому я и использую примитивный способ предотвращения коллизий через определение цвета. Так выглядит этаж, на котором я тренировался ловить столкновения: В каждой из комнат будет находится знак "?", нарисованный либо как регион, либо как и сам человечек. Когда координаты человечка столкнуться с координатами значка, будет выскакивать окно с описанием данной комнаты. Ознакомившись с содержанием вашего файла sample, я немного переделал свой проект. У меня была очень похожая на вашу реализация перемещения, но она не совсем корректно работала, т.к. была описана в событии FormKeyDown. По этому я кое что сделал как у вас. Но появились новые проблемы: 1) человечек ходит нормально, пока не сталкивается со стеной. После столкновения он не может двигаться 2) Нужен ваш совет - где лучше всего описывать смену анимации движения персонажа? (нажали "Влево" - анимация сменяется на движение влево, и т.д.) 3) Пытаюсь изучить ваш класс камеры, но многое до сих пор не ясно. Не могли бы вы написать небольшие комментарии к содержимому класса, пожалуйста. Помогите мне пожалуйста в решении вопросов. Проект: Animation.rar
0
|
|
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
|
| 01.03.2013, 01:03 [ТС] | |
|
с 1-й проблемой разобрался, сделав буфер анимации, с помощью которого определял, можно идти или нет, теперь все нормально работает. Над 3-й работаю, а вот 2-ю проблему никак не могу решить. Все дело в том, что анимация просто не успевает проиграться до конца, и её начинает загружать заново функция в таймере, и если увеличить интервал, смена будет происходить некрасиво и с запаздыванием.
Вот переделанный проект, с обработкой коллизий ( способ конечно "дубовый", но все же рабочий) Коллизия.rar
0
|
|
|
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
||||||||||||||||||||||||||||||||||||
| 11.03.2013, 13:36 | ||||||||||||||||||||||||||||||||||||
|
freemanc, доброго времени суток. Взглянув на Ваш план здания, создалось впечатление, что регионами тут можно воспользоваться от силы раз или два, а все остальное описать при помощи TRect. При чем, как мне кажется, легче описать TRect'ами не препятствия а зоны по которым можно перемещаться. Но для этого надо инвертировать логику =)
Но код посмотрел: Это я бы вообще убрал. Этот таймер Вам не нужен. Загружайте в событиях нажатия и отжатия клавиш.
И кажется нашел ошибку из-за которой у вас не работали столкновения: вместо
1
|
||||||||||||||||||||||||||||||||||||
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
||||||||||
| 12.03.2013, 02:01 [ТС] | ||||||||||
|
Здравствуйте Deimon, рад снова Вас видеть) Я сильно благодарен Вам за example, файлы внутри открыли мне на многое глаза, и, что самое главное, дали понять некоторые принципы и механику, это очень помогло)
За время Вашего отсутствия мне удалось продвинуться дальше в ходе реализации проекта, чему я несказанно рад)) Подробнее об изменениях: 1) Удалось упростить алгоритм с определением цвета. Раньше использовалась функция CreateDCA(...) которая делала скрин экрана, записывала его в переменную, ф-ей GetPixel(...) определяла цвет, при этом координаты точки нужно было постоянно корректировать по отношению к окну (ну вобщем, бред) И тут вдруг нашлось и вспомнилось свойство канвы - Pixels[][], которое помогло увеличить производительность и упростить весь алгоритм ![]() 2)
3)
4)
5) Со временем я более-менее разобрался с Вашим классом камеры, интересовали больше всего вот эти строчки и "развертывание вектора направления" (что это? ):
Вот сам проект, какой он есть на сегодняшний день: Проект.rar
0
|
||||||||||
|
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
||||||||||||
| 14.03.2013, 14:22 | ||||||||||||
|
Чтоб этого не было надо проверять пиксели по всему контуру человечка. Не понравилось, что вопросы выглядят как препятствия и в комнату невозможно пройти. Да и то что они не пропадают после "использования" - тоже не хорошо.
1
|
||||||||||||
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
|||||||||
| 16.03.2013, 21:27 [ТС] | |||||||||
У меня опять проблемы( 1) С одним этажом вроде бы разобрался, и начал делать переход на 2й. Принцип был таким : создать 2 объекта "лестница" того же типа, что и знаки "?", и при столкновении их TRect'ов с TRect'ом человечка, использовать метод объекта Map - LoadMap(<путь>). Так и сделал, но в итоге получилось так, что столкновения со стенами отслеживаются только на первом этаже, на 2м ничего не происходит 2) В Вашем проекте очень удобно хранились объекты - в векторе. Я решил последовать примеру, и делал тоже самое, но с вектором ничего не получается. Пришлось даже тему отдельную создавать, потому что классы одинаковые, а работает только один. В примере, который я кидал, уже использовался deque. Суть проблемы в следующем: я хотел создать двумерный массив с объектами, что бы было удобней работать, 1 этаж - соответствующий массив объектов, и т.д.
в 24-й строчке я пытаюсь присвоить координаты "?" элементам массива Objects, координаты "?" сохраняются, но вместо 6-ти значков "?" рисуются только 2. Очень нужна Ваша помощь, т.к. с этими проблемами я бьюсь об стену головой уже целый день, перепробовал кучу вариантов, так ничего и не помогло ![]() Помогите мне, пожалуйста, разобраться в чем тут проблема, потому что я уже не знаю что и делать. Проект: Проект.rar
0
|
|||||||||
|
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
|||
| 18.03.2013, 10:50 | |||
|
С проблемой знаков я не разобрался, не понимаю что конкретно должно должно происходить.
1
|
|||
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
||
| 25.03.2013, 23:16 [ТС] | ||
|
Вы говорили, что лучше работать с значением цвета в шестнадцатеричной форме. В фотошопе код цвета, которым рисуются стены первого этажа, имеет код #8691c7, а второго - #8691c8 (как Вы и говорили). Подскажите пожалуйста, как мне код #8691c8 например представить в "съедобном" для проги шестнадцатеричном виде?
0
|
||
|
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
|
|||||||||
| 26.03.2013, 12:38 | |||||||||
могу различать более 16 млн. цветов))) Девушки с "светло-бледно-розовым" даже в сравнение со мной не идут)))
1
|
|||||||||
|
14 / 14 / 6
Регистрация: 27.11.2012
Сообщений: 140
|
||||||||
| 26.03.2013, 20:55 [ТС] | ||||||||
|
Сегодня нашел выход из ситуации: преобразователь RGB(число, число , число); Тоесть, в окне фотошопа в палитре нужно брать соответствующие значения : и записать в функцию: RGB(134, 145, 200);
0
|
||||||||
|
|
|
| 26.03.2013, 20:59 | |
|
1
|
|
| 26.03.2013, 20:59 | |
|
Помогаю со студенческими работами здесь
20
Путеводитель по городу Путеводитель по кафедрам факультета Путеводитель по книжкам про C++ Builder Приложение «Путеводитель по любому городу» NTI - ССЫЛКА-ПУТЕВОДИТЕЛЬ СПРАВОЧНИК ДЛЯ ПУТЕШЕСТВУЮЩИХ ПО НОРВЕГИИ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|