Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.05.2013, 17:33
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Записки начинающего Игродела

Доброго времени суток все кто читает мой текст. Я зарегистрировался совсем недавно, хотя давно уже пользуюсь ресурсами вашего форума для самообучения, однако, как оказалось, учусь я слишком медленно. Дело в том, что мне надо в течение двух недель закончить курсовую по программированию и это без учета, что другие предметы сдавать надо. Но ладно, это моя проблема и не буду грузить ею )
Итак, суть.
Я создаю игру.
2D слэшер. Как я понимаю это достаточно простая игрушка, ибо все что я хочу, это небольшая локация 800 пикс шириной и 300 высотой. Есть анимированный герой, который сражается с толпами мобов прибывающих с двух сторон экрана.
Детали игры таковы:
- у Героя есть шкала жизни и ярости. Жизнь имеет пассивную регенерацию. Ярость заполняется при нанесении урона мобам и в три раза быстрее заполняется при получении урона от мобов.
- Герой может бегать, прыгать, а кнопкой down еще и защищаться мечом.
- Герой получает опыт за убийство мобов и за определенное количество опыта он получает уровни. За уровни получает бонусы, что дают ему преимущество (например, если кто-то играл - Crimsonlands. Там тоже есть за уровни бонусы, которые дают увеличенные жизни, регенерацию и т.д.)
- у Героя по мимо обычной атаки есть одна единственная спец. атака, которой можно воспользоваться при полном заполнении шкалы злости.
- с повышением уровня героя, я хочу попытаться сделать увеличение силы приходящих монстров, а так же их количество.

В принципе, это всё.
Единственное, я еще хотел повставлять звук, - фоновая музыка, реплика героя, когда у него мало жизни, реплика героя когда он делает спец.атаку реплика когда умирает, реплика когда получает уровень.

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

Вот...
У меня есть основа, но я все еще разбираюсь с движением героя и происходит это... Весьма туго. Я бы не обращался и сделал бы всё сам, но у меня поджимают сроки и потому, я прошу вашего времени и помощи в моем проекте.
Единственное что я из всего этого сделал, это фон и способность героя бегать по форме, что, конечно, вас может не впечатлить. Исходный код или проще, - сам исходник я могу скинуть если согласитесь мне помочь, - не хочу тему загружать.
Заранее благодарю за любую подсказку.
Ответить с цитированием
  #2  
Старый 13.05.2013, 18:04
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Работа, код на шару.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 13.05.2013, 18:15
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Если Вы имеете в виду это, то мне не нужны ни шара, ни заказ программера. Мне нужны лишь ответы на конкретные вопросы и подсказка, если это возможно.
Благодарю.
Ответить с цитированием
  #4  
Старый 13.05.2013, 18:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

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

Пока что я не вижу ни одного вопроса в теме. Как следствие, и ответить ничего не могу.
Задавай вопросы, будем обсуждать.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 13.05.2013 в 18:24.
Ответить с цитированием
  #5  
Старый 13.05.2013, 19:12
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Да, Баргест, прошу прощения, Вы правы.

Я буду задавать вопросы по мере продвижения, так, я думаю, будет удобней.

На данном этапе у меня проблема с прыжками. Я гуглил ответ на вопрос, как разработать гравитацию (обычное равноускоренное движение) и сделать её глобальной процедурой, дабы, если герой находится в воздухе, он всегда возвращался на исходную координату Y. Я сделал подобие гравитации, однако у меня оно нагло зависло. А при попытке сделать самостоятельное, плавное падение с ускорением, - действие происходит моментально.

Так же я все еще не могу разобраться как сделать "карточку" персонажа и монстра. То есть количество жизни, сила атаки.

Позвольте я покажу исходник, может Вы сможете что-то подсказать?

тык - у форума почему-то загрузчик ошибает.
Примечание:Ссылку обновил.

Последний раз редактировалось Царь, 13.05.2013 в 19:23.
Ответить с цитированием
  #6  
Старый 13.05.2013, 19:25
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
На данном этапе у меня проблема с прыжками.
Если надо прыгнуть, значит надо задать стартовую скорость (вверх). Вектор силы тяжести действует постоянно. Самый простой вариант - на каждой итерации игры (глобальный счетчик) нужно ко всем векторам скоростей прибавить вектор dt * g, где dt - интервал времени между двумя итерациями. После этого все тела сдвигаются в соответствии со своими векторами скоростей на V*dt. Если прыгает только герой - вычисляем только для него. Так же на время нахождения в воздухе (координата Y > 0) можно отключить управление.
Разумеется, нужно сделать проверку столкновений, но в данном случае все объекты можно считать круглыми, тогда столкновения считаются просто. Столкновение с землей - расстояние от центра окружности до прямой меньше радиуса, с другими предметами - расстояние между двумя центрами окружностей меньше суммы их радиусов.
Цитата:
Так же я все еще не могу разобраться как сделать "карточку"
"Карточка" - задать объект структурой или классом, у которого будут все характеристики. Жизни, координаты, скорости по осям. Для игрока - дополнительные параметры, как уровень, опыт и т.д. Все действия (перемещение, удары, "прокачка") производятся над этой структурой.
Такие вопросы надо по-хорошему решать на этапе проектирования. И ответ на них можно найти, если правильно сам вопрос поставить. А для этого нужно описать, что должно происходить, в виде структур данных и методов их обработки. Делать такие вещи после начала написания кода - получить кучу проблем при дальнейшей доработке. Но уже, собственно, поздно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 13.05.2013 в 19:29.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Царь (14.05.2013)
  #7  
Старый 13.05.2013, 19:26
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Понял. Сейчас попробую инициализировать

Последний раз редактировалось Царь, 13.05.2013 в 19:29.
Ответить с цитированием
  #8  
Старый 13.05.2013, 21:50
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от Bargest
ко всем векторам скоростей прибавить вектор dt * g, где dt - интервал времени между двумя итерациями. После этого все тела сдвигаются в соответствии со своими векторами скоростей на V*dt.
Предлагаю вместо формулы скорости использовать формулу для перемещения
- горизонтальное x = x0 + Vx0 * t - g * t^2 / 2
- вертикальное y = y0 + Vy0 * t

Пардон, перепутал вертикальное (ускорение вниз) движение с горизонтальным (ускорения нет).
x = x0 + Vx0 * t
y = y0 + Vy0 * t - g * t^2 / 2

Последний раз редактировалось AlexSku, 14.05.2013 в 11:45.
Ответить с цитированием
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение:
Царь (14.05.2013)
  #9  
Старый 13.05.2013, 22:21
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Предлагаю вместо формулы скорости использовать формулу для перемещения
Можно и так. Так даже точнее.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #10  
Старый 13.05.2013, 23:56
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я, как бы, осуществил гравитацию. Мой персонаж действительно "плавно" спускается с небес на землю. Но есть одно большое "но". Эта зараза ни в какую отказывается плавно подниматься в воздух. Моментально вверх и только потом плавный спуск. Задержка действует на всю программу.
Возможно я что-то упустил, или просто не знаю, - как сделать задержку? Как осуществить время t в ваших формулах? А так, идея очень хороша.
Ответить с цитированием
  #11  
Старый 14.05.2013, 11:53
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от Царь
Я, как бы, осуществил гравитацию. Мой персонаж действительно "плавно" спускается с небес на землю. Но есть одно большое "но". Эта зараза ни в какую отказывается плавно подниматься в воздух. Моментально вверх и только потом плавный спуск. Задержка действует на всю программу.
Возможно я что-то упустил, или просто не знаю, - как сделать задержку? Как осуществить время t в ваших формулах? А так, идея очень хороша.
Как раз гравитация вместо плавного движения даёт равноускоренное, т.е. предмет начинает всё быстрее и быстрее двигаться вниз. Очень внимательно обратите на знаки Y и скорости Vy.
Плавное снижение (сначала ускорение, а потом переход к постоянной скорости) получается за счёт введения новой силы сопротивления воздуха. Она пропорциональна скорости и направлена всегда против движения. Коэффициент можете подобрать (зависит от массы тела и эффективной площади рассеяния, точнее сказать, аэродинамических характеристик).
Ответить с цитированием
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение:
Царь (14.05.2013)
  #12  
Старый 14.05.2013, 18:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Сомневаюсь, что в такой простенькой игре нужно сопротивление воздуха.
Цитата:
Как осуществить время t в ваших формулах?
Да хоть по таймеру.
Цитата:
Эта зараза ни в какую отказывается плавно подниматься в воздух.
Возможно что-то не то со знаками, или еще с чем-то. Когда делал простенькую 3Д физику плеера, таких проблем ни разу не возникало.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Царь (14.05.2013)
  #13  
Старый 14.05.2013, 19:52
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Премного благодарен за пояснение работы физики - после пятого удара головой об стену мне все же удалось сообразить как это всё осуществить и он таки прыгает, - красиво и эффектно )
Хотя все же я так и не понял, как с помощью DXInput добиться приращение ускорения, ибо он при нажатии выполняет процедуру один раз.

- Может это глупый вопрос, но как с помощью компонентов ДелфиХ осуществить наложение маски? Я искал по интернету, но там в основном сделано с помощью обычных компонентов Делфи. Но если так, как тогда их объединить два способа вместе? Или такое невозможно?

- И вот теперь главный вопрос, который поможет осуществлять действия в дальнейшем, - как сделать задержку на действия? К примеру, персонаж прыгнул и надо, что бы он секунду задержался, а не прыгал как сумасшедший. Так же пригодится для осуществления задержки при атаках. Функция sleep однозначно не подходит, ибо тормозит всё приложение.
Ответить с цитированием
  #14  
Старый 14.05.2013, 20:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Может это глупый вопрос, но как с помощью компонентов ДелфиХ осуществить наложение маски?
Что значит "маска"? Если прозрачный цвет - то для стандартных компонентов Image свойство Transparent, а для надстроек скорее всего использовать картинки в формате ARGB, то есть с альфа-каналом.
Цитата:
И вот теперь главный вопрос, который поможет осуществлять действия в дальнейшем, - как сделать задержку на действия? К примеру, персонаж прыгнул и надо, что бы он секунду задержался, а не прыгал как сумасшедший.
Если нажата кнопка прыжка - нужно просто сообщить герою скорость вверх и отключить управление, пока он не коснется земли. Далее все будет работать в своем темпе - на каждой итерации игры будут пересчитываться координаты и скорость. Для ударов - включить анимацию (которая тоже отрисовывается по глобальным итерациям игры), а когда она завершится - вычесть жизни объекта.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Царь (14.05.2013)
  #15  
Старый 14.05.2013, 20:25
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,501
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Есть готовые физ. движки, только геометрию им задавай.
Например движок Newton.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Царь (14.05.2013)
Ответ



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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter