Среда, 27 Ноября 2024, 01:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Зависимость высоты прыжка от времени удержания клавиши (2D)
choopieДата: Воскресенье, 25 Января 2015, 14:11 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет, нужна небольшая помощь. Нужно сделать так, чтобы персонаж подпрыгивал выше, если кнопка прыжка зажата дольше, чем при одном быстром нажатии. Ну, т.е.:
Быстрое нажатие - невысоко подпрыгнул. Нажал и держишь клавишу - подпрыгнул выше.

Собственно прыжок вот как реализован:
Код
    if (isGrounded && (Input.GetKey (KeyCode.Space) || Input.GetKey (KeyCode.W))) {
    anim.SetBool ("Ground", false);
    //holdingTime += Time.deltaTime;  
    rigidbody2D.AddForce (new Vector2 (0, 1000));  
   }


Пытался умножить силу, прилагаемую к телу на меняющуюся переменную holdingTime - но это, очевидно, не вышло. Ни в FixedUpdate ни в Update, ибо выполняется то моментом. :\ Других идей больше нет. sad
FadeBakerДата: Воскресенье, 25 Января 2015, 14:27 | Сообщение # 2
JavaSE Game Developer
Сейчас нет на сайте
Попробуй завести переменную, отвечающую за время прыжка. Увеличивай ее при удерживании клавиш прыжка до определенного значения — это и будет высотой прыжка. Вот примерно так:
Код
bool onGround, jumped;
int jumpTime;
int jumpHeight = 15;

if (Input.GetKey(KeyCode.Space)) {
      if (onGround) jumped = true;
} else {
      jumped = false;
}
if (jumped) {
      if (jumpTime++ < jumpHeight) rigidbody2D.AddForce(new Vector2(0, 1000));
} else {
      jumpTime = 0;
}

Логика примерно такова. Код при желании можно сократить, если будет в этом такая потребность.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.


Сообщение отредактировал FadeBaker - Воскресенье, 25 Января 2015, 14:31
choopieДата: Воскресенье, 25 Января 2015, 15:04 | Сообщение # 3
частый гость
Сейчас нет на сайте
FadeBaker, не совсем понял, что ты имел ввиду. >.< Я ведь вроде похожим способом и делал, заводил переменную, которую увеличивал при удержании клавиши.

Я еще вот такой быдлокод писал, отказавшись от динамичности изменения высоты, сделав 3 основных значения для нее.



Тоже не работает.


Сообщение отредактировал choopie - Воскресенье, 25 Января 2015, 15:10
FadeBakerДата: Воскресенье, 25 Января 2015, 15:40 | Сообщение # 4
JavaSE Game Developer
Сейчас нет на сайте
Как это "что я имею в виду"? Вариант решения я имею в виду. Я достаточно понятно и просто его преподнес — поднимаем объект, пока не истекло время прыжка.

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
choopieДата: Воскресенье, 25 Января 2015, 17:18 | Сообщение # 5
частый гость
Сейчас нет на сайте
Теперь понял, что ты предлагал. Вот что сделал, прекрасно работает, почти:

Код
if ((Input.GetKey (KeyCode.Space) || Input.GetKey (KeyCode.W))){
         if(holdingTime++ < jumpHeight)
           rigidbody2D.AddForce (new Vector2 (0, 250 ));
        }
else      
        holdingTime = 0;


Когда пытаюсь сделать ограничение на прыжок только с земли ( при этом коде можно бесконечно продолжать прыгать в воздухе ) - все перестает норм работать. :\ И по твоему примеру делал, и по своему делал, полчаса сидел перебирал разные варианты - не выходит поставить ограничение. >.<

Добавлено (25 января 2015, 17:18)
---------------------------------------------
Так, все, ограничение заработало, спасибо. Не знаю почему до этого не работало, заново сделал и теперь все ок.


Сообщение отредактировал choopie - Воскресенье, 25 Января 2015, 17:18
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг