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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2015, 01:26   #1
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию Реализовать прыжок

Собираю игру, мне нужно сымитировать прыжок (Image) персонажа на кнопку (стрелка вверх) один в один подойдет пример прыжка как в игре марио.
Прыжок то есть должен быть реальный, с чувством гравитации, ваши идеи?
NIKOLAYY2 вне форума Ответить с цитированием
Старый 23.01.2015, 01:38   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Код:
X := X0 + t * V * Cos(A);
Y := Y0 + t * V * Sin(A) - g * Sqr(t);
X, Y - искомые координаты.
t - текущее время.
X0, Y0 - координаты начала прыжка.
V - начальная скорость.
A - угол прыжка (в радианах).
g - ускорение свободного падения (9.81).
Arigato вне форума Ответить с цитированием
Старый 23.01.2015, 01:42   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от NIKOLAYY2 Посмотреть сообщение
Собираю игру, мне нужно сымитировать прыжок (Image) персонажа на кнопку (стрелка вверх)
Это чтобы персонаж напоролся на "стрелку вверх"?

Цитата:
Сообщение от NIKOLAYY2 Посмотреть сообщение
Прыжок то есть должен быть реальный, с чувством гравитации, ваши идеи?
Не. Я прыгать на стрелку не собираюсь.

P.S. А какие идеи ты ждёшь? Или под идеями ты имеешь в виду код?
northener вне форума Ответить с цитированием
Старый 23.01.2015, 01:45   #4
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

northener Остынь. Arigato дал то, что нужно.
WinCoder вне форума Ответить с цитированием
Старый 23.01.2015, 02:14   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
northener Остынь. Arigato дал то, что нужно.
Остыну тогда, когда этот конкретный ТС перестанет "расплёвывать" свои вопросы по форумам. Плюнет вопрос и уйдёт.
Вот пример http://www.programmersforum.ru/showthread.php?t=272172
А мы ломаем голову что бедному ТС надо? Чем ему бедному помочь? И ладно бы он хоть какой-то свой код приводил. Так нет. Никакого кода, только вопрос-плевок.

Последний раз редактировалось northener; 23.01.2015 в 02:17.
northener вне форума Ответить с цитированием
Старый 23.01.2015, 02:59   #6
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

northener
Я занят был код на прыжок объекта собирал.
Код вот насобирал, работает подпрыгивает и падает, но есть меленький грешок в коде, если на кнопку беспрестанно жать, то он будет наверху пока неотпустиш кнопку, а затем упадет все равно на низ на то же место где и подпрыгивал.
(Нужно незасимо была кнопка отпущена после нажатия или небыла, персонаж однозначно должен поместиться на линию низ на картинке)

Arigato
Спасибо, сейчас буду пробовать, код на таймер тоже ставить?

Код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if vverh = True then
  begin
    Label3.Caption := IntToStr(koefvverh);
    koefvverh := koefvverh + 1;
    Image1.Top := Image1.Top - 3; //ïî ñêîëüêî ïèêñåëåé ïîäïðû
ãèâàòü

    if koefvverh > 40 then //âûñîòà ïðûæêà
      vverh := False;
  end;

  if vverh = False then
  begin
    koefvverh := koefvverh - 1;
    Image1.Top := Image1.Top + 3;
    Label4.Caption := IntToStr(koefvverh);

    if koefvverh = 0 then
      Timer2.Enabled := False;
  end;
end;
Изображения
Тип файла: jpg 1111.jpg (82.6 Кб, 152 просмотров)

Последний раз редактировалось Stilet; 23.01.2015 в 07:38.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 23.01.2015, 06:56   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
но есть меленький грешок в коде, если на кнопку беспрестанно жать, то он будет наверху пока неотпустиш кнопку,
Ну так вставь проверку, что он в воздухе, то прыжок отменяется.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 23.01.2015, 08:48   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я бы посоветовал поработать над математикой. http://habrahabr.ru/post/131931/

А также над кодом http://www.gunsmoker.ru/2011/01/blog-post.html и далее по ссылкам
Ибо код, состоящий из десятков условий, да ещё и с привязкой к компонентам и с жёсткими цифрами очень быстро станет неподдерживаемым и непереносимым.

Я бы _очень_ посоветовал поизучать закреплённые темы разделе разработки игр на форуме, а то уже какая тема с простейшими вопросами, которые давно обсуждены на десятки раз.
phomm вне форума Ответить с цитированием
Старый 23.01.2015, 19:55   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Спрайты надо рисовать не отдельными Image-ми, а в простейшем случае на отдельном битмапе отрисовывать фон, а поверх него спрайты из ImageList, затем битмап выводить на канву формы. Для игры типа Марио скорость отрисовки будет приемлемая.
Arigato вне форума Ответить с цитированием
Старый 24.01.2015, 03:03   #10
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

phomm
Хорошие статьи, сложные матемтические примеры, но зато правильно высчитывающие. Для себя немного их упростил (на прыжок планирую отвести 4 кадра, 4 тайла и когда в коде перерисовывается следующий кадр, то меняю и значение таймера в этом участке).

Utkin
Цитата:
Ну так вставь проверку, что он в воздухе, то прыжок отменяется.
Эта проверка была, то что персонаж в воздухе- там флаг стоял, но он все равно подпрыгивал.
Несрабатывало вот почему- я не учел что нажатие на клавишу 1 раз это незначит что код под этой клавишей выполнится 1 раз, клавиша ведь имеет свойство "залипать", поэтому добавил еще 1 флаг на саму клавишу.

Arigato
Цитата:
Спрайты надо рисовать не отдельными Image-ми...
Да а тут вы правы, как начал делать "окружение" в игре, проверки столкновений визуальными Image-ми, где, когда и что столкнлось, тут реально стало как сказал-
phomm
Цитата:
Ибо код, состоящий из десятков условий, да ещё и с привязкой к компонентам и с жёсткими цифрами очень быстро станет неподдерживаемым и непереносимым.
Поэтому решено было идти вот таким путем:
Вся видимая часть формы- это некий массив разбитый на квадраты размером как в большинстве случаев 32 на 32.
А столкновение объектов это не визуальное какое-то столкновение каких то имаг, а столкновение этих виртуальных клеток.

Вот как в этом видео на 12 минуте:
http://www.youtube.com/watch?v=6OHMFwQK44k

Там если кто будет смотреть он нормальным образом столкновение обрабатывает?
Я его код с С++ тогда и переведу в делфи.
Да и непереведу даже, потому что я особо С++ незнаю, а просто сделаю чтобы код по алгоритму делал тоже самое что я видел в видео да и все.
Если смогу конечно )

-------------------------------------------------------------------------
Я там еще непонял как он там имея спрайт аннимированного персонажа на 4 кадра нкправленого в одну сторону, он его переворачивает как-то програмно в другую сторону когда тот у него идет влево? (не пикселями же копирует в обратном направлении..)
Я пока использую отраженную копию спрайта сделанную в фотошопе.

Последний раз редактировалось NIKOLAYY2; 24.01.2015 в 03:16.
NIKOLAYY2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать прыжок MeynSpain Общие вопросы Delphi 10 13.04.2014 12:04
Реализовать класс с именем "Stroki". Реализовать в нём возможность <Поиска и замены фрагмента> Olgazag C# (си шарп) 0 12.12.2013 11:09
Какой функцией можно задать прыжок лягушки? vadiprog Помощь студентам 3 04.01.2012 22:41
[MASM] Прыжок из программы в подпрограмму. SoundMan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.12.2008 18:41