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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2010, 12:29   #421
Deamonig
Форумчанин
 
Аватар для Deamonig
 
Регистрация: 19.09.2009
Сообщений: 166
По умолчанию

Попробую обьяснить. Тебе достаточно ввести одну переменную в твой код, которая будет хранить информацию о состоянии игрока (0 - стоит на земле, 1 - летит вверх, 2 - летит вниз). И осуществлять новый прижок только если он стоит, т. е. переменная равна нулю. Если не понятно, приведи пример своего кода, в котором обрабатывается прижок. Помогу исправить
Deamonig вне форума Ответить с цитированием
Старый 01.02.2010, 16:16   #422
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Пример аркады с прыжком

Вот пример с прыжками, в комментариях. Пример на двух пользователей, на WASD и стрелках. Размер текстуры - цветных квадратов, берется автоматически. Пример совсем сырой и довольно древний, кому нужно, тот переделает, ...но есть в нем механизмы уже "взрослой" аркады, т.е. собственные типы на карту и игрока, ...отрисовка силами Canvas и BitBlt.
Вложения
Тип файла: zip Аркада.zip (11.4 Кб, 100 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 01.02.2010, 19:07   #423
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

Спасибо за примеры, щас буду пробывать их приделать для себя. Позже отпишу что вышло =)
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 01.02.2010, 19:39   #424
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

Beermonza, Вобщем если я правильно понял ваш алгоритм, то там при нажатии на W прыжку присваивается true. Потом в таймере проверяется клетка "под ногами", если там 0 то скорость падения каждый такт увеличивается на g, а если 1 то скорость 0, и клетка после падения поднимается на указанную величину( вот этот момент немного не понял ). и проверяется значение Jump, если да то скорость падения уменьшили. Я ничего не упустил? =)
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 01.02.2010, 22:12   #425
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Да, ..в условии проверка на "пол под ногами", если оно ложное, т.е. под ногами пол, то скорость становится отрицательной, каждый такт уменьшаясь на гравитацию G. В какой-то момент условие это становится истинным, т.е. под ногами нет пола, и происходит дальнейшее уменьшение скорости, пока она не переползет за 0 и не отправит объект обратно к полу со скоростью, постоянно увеличивающуюся на гравитацию G. Как только пол достигнут, условие снова становится ложным, и проверяет флаг прыжка, если его нет, то скорость будет равна нулю, т.е. объект неподвижен, стоит на полу.
Есть еще проверка на "потолок". Это условие ищет столкновение сверху, если находит непроходимую клетку, то устанавливает скорость положительную, объект летит вниз. Через какое-то время условие становится ложным, а проверка на "пол под ногами" истинным, и объект падает вниз.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 02.02.2010, 10:01   #426
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

А про смещения можешь поподробнее рассказать, потому как постоянно возникают такие ситуации когда объект проваливается..
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 02.02.2010, 15:18   #427
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Объект может провалиться только если встретится с другим, поскольку они оба меняют под себя проходимость, а проверки на их взаимодействие просто нет.
Вот этот код показывает, что происходит на карте, как меняются координаты объектов:
Код:
// отрисовка точных координат в массиве карты (не обязательное и бессовестное)
BitBuf.Canvas.Draw(UPosX*cell, UPosY*cell, UTexPos);
Для чего вообще нужно так делать? ...для того чтобы уйти от привязки к пикселям монитора, и считать в привычной системе карты, т.е. ее клетками. В любой момент можно создать объект в нужном месте карты. Притом, система не привязана к размеру тайлов, она универсальна.
Чтобы избавиться от рывков, нужно ввести смещение по осям X и Y. Эти смещения отсчитываются до поры, пока не нужно будет перейти на соседнюю клетку. Большая текстура показывает плавность хода, благодаря смещениям.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 09.02.2010, 20:40   #428
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Вопрос: как лучше делать меню и интерфейс игры в целом?
То есть использовать для каждого окна свою форму, например для меню-форма №1, для главного окна игры - форма №2, для опций - форму №3 и т.д. или уничтожать и создавать кнопки на одной форме?
Pyton вне форума Ответить с цитированием
Старый 09.02.2010, 21:58   #429
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если в плане именно лучше, то на мой субъективный взгляд вообще меню, опции и подобные вещи кнопок содержать не должны (имеются в виду кнопки разряда TButton и им подобные). Лучше если все такие объекты будут нарисованы.
Вот как лично я реализовал в своей игре меню. Для обычного, собственно игрового, режима в игре есть свой буфер типа TBitmap, куда рисуется вся визуальная часть, ну а потом это дело копируется на канвас формы. Для меню также создается свой объект типа TBitmap, залитый каким-нибудь ядовитым цветом. На нем имеется несколько изображений неправильной формы, представляющие собой "кнопки" меню. Фон у них того же ядовитого цвета. Фон меню у меня рисовался в обычном буфере, игровом, выводился на форму, поверх него - с помощью функции Draw выводился битмап меню с установленным TransparentColor значением того самого ядовитого цвета. Как отлавливалось взаимодействие с меню: при вождении мышкой по форме считываются координаты курсора, по щелчку - проверяем цвет пикселя на битмапе меню с координатами последней позиции курсора. Если не цвет прозрачности - с помощью простых вычислений находим, какая это была кнопка. Впрочем, у меня еще было своеобразное подсвечивание каждой кнопки при наведении, что несколько усложняло весь алгоритм.
Из альтернативных способов реализации подобного поведения меню - вместо битмапа меню используется форма, тоже прозрачная, синхронно двигающаяся с главной формой. При щелчке по прозрачной части второй формы клик должен прийтись по нижней форме. После попыток воплотить этот вариант я отказался от него по следующим причинам: во-первых, мой C++ Builder отказался считать щелчки по прозрачной части формы щелчками по нижней (главной) форме (в Delphi, однако, говорят, этот прием работает); во-вторых, вторая форма, в положении StayOnTop делается сама "активной", хоть и невидима со своими границами, а главная - соответственно подсвечивалась как "неактивная"; в-третьих, синхронное перемещение стало проблемой, т.к. происходило по таймеру, и даже при интервале 1мс вторая форма заметно запаздывала, получалось меню висящее вообще вне окна игры! Да и вообще, я спервоначалу намучался, когда выбирал правильный способ работы со второй формой, так что не захотел дальше с ней работать. Ну и еще из причин - зачем создавать лишнюю форму, когда можно ограничиться всего лишь битмапом, подумал я.
И, собственно, еще один, более простой, но неплохо смотрящийся вариант. Опять же, меню рисуется каким-то фоновым рисунком, кнопки представляются красиво нарисованными правильными прямоугольниками и располагаются как вам надо. Все меню рисуется в одном (том же игровом) буфере, координаты точки, где произошел клик, однозначно сопоставляются с нужной кнопкой с помощью простейших расчетов.
Вот такое мое видение способов рисования меню. Единственное, что я молчаливо здесь предполагаю - это что меню имеет свой собственный фон, т.е. не рисуется поверх игрового процесса (впрочем, с помощью способа, который выбрал себе я, и это можно, только и тут будут свои ограничения).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 10.02.2010, 19:27   #430
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Создание меню/интерфейса

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

1. На основе форм (TForm)

Под каждую группу элементов интерфейса создается отдельная форма. В ней расположены элементы декора (Image) и элементы управления, всевозможные кнопки, переключатели, полоски состояния и пр. Если стандартные компоненты не устраивают, то все можно выполнить с помощью Image, помещая в них графические экземпляры кнопок не стандартной формы. В OnClick выполняется обработка нажатия на такую "нарисованную" кнопку. Кроме того, можно воспользоваться событиями Image - OnMouseDown и OnMouseUp, в первом событии можно смещать Image по Top и Left на 1 пиксел, во втором возвращать на место, ...при этом будет иллюзия притапливания рисованной кнопки в момент нажатия на клавишу мыши и возвращение при отпускании. Процедура с OnClick теперь переползет в OnMouseUp, и OnClick уже не нужно. В Image вас будет интересовать свойство Transparent. Гром, пожаловался на свой C++ Builder, но я вам говорю со 100-процентной гарантией, если часть прозрачная, то никакие клики мыши на ней в Delphi 7 не проходят по прозрачной форме, если за ней есть главная, ...т.е. работает только по видимой части рисованной кнопки на форме меню, прозрачные части графики считаются не активными, поскольку и форма и ее компоненты для ОС - суть, графика, и все состояния прозрачности компонентов подчиняются основным настройкам форм.
Если не устраивает стандартный стиль окна, то он убирается совсем, по свойству BorderStyle = bsNone, НО! ...не забудьте про отдельную кнопку закрытия формы, иначе она так и будет маячить на экране. Синхронизация понадобится, если игра выполнена в окне, это делается по таймеру с интервалом 31 мс (даже есть некая иллюзия 3D). В таймере условие на проверку положения главной формы, со старым положением и новым, если есть отличие, узнаем на сколько и двигаем все формы интерфейса на столько же.

2. На основе панелей (TPanel)

Вы точно знаете, что у вас квадратные не прозрачные элементы меню/интерфейса, с графическим задним фоном. В этом случае все меню создаются на панелях, на задний фон помещаются Image, на передний - стандартные компоненты, или рисованные, или те же Panel в виде кнопок, их цвет можно менять. Все элементы готовые располагаются в сторонке скрытыми "по-умолчанию" (Visible = False), выставляются на места после запуска программы, появляются и исчезают по созданной структуре меню и интерфейса. Вся графика загружается только после запуска программы. Этот метод сокращает размер исполнительного файла и загружает CPU значительно меньше.

3. На основе буферов TBitmap и "пустых" Image в качестве зон срабатывания

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

4. Полностью графический метод, без VCL
В основе PNG-фрагменты форм, из которых с помощью конструктора собирается скелет любой формы, или готовые изображения форм хранятся в сжатом виде и подгружаются в буфера. Области срабатывания хранятся в движке интерфейса, который отслеживает положение курсора мыши на главной форме. Посредством флагов определяется нужно ли выполнять отслеживание нажатий или нет, на каждый конкретный объект меню/интерфейса. Здесь повсеместно вспомогательные файлы структуры меню, особого типа.

Выбирайте.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хорошие уроки Render Общие вопросы Delphi 9 15.09.2012 07:13
Акцесс вопросы новичков Yaga Помощь студентам 4 02.06.2008 00:16
Учебники для новичков в програмировании Рар Общие вопросы Delphi 6 08.01.2007 08:07