Вторник, 24 Декабря 2024, 15:44

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Маленькая проблема со звуком
Лер_да_РимДата: Суббота, 14 Мая 2011, 00:10 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Никогда не уделяя особого внимания звукам и специализируясь в основном на космических играх и играх, где есть показатели скорости) пришёл в тупик. Знаю, похожая тема есть где-то в этом разделе... Но не совсем так там.

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

Code
if(keyboard_check_pressed(ord('A'))) or (keyboard_check_pressed(ord('D'))) {sound_loop(snd_step)};
if(keyboard_check_released(ord('A'))) or (keyboard_check_released(ord('D'))) {sound_stop(snd_step)};

Но появились проблемы. Если зажать обе кнопки, перс остановится, а звук продолжит проигрываться. К тому же будут и другие изъяны, догадываюсь. Подскажите плиз более подходящий код...


Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

FadeBakerДата: Суббота, 14 Мая 2011, 00:13 | Сообщение # 2
JavaSE Game Developer
Сейчас нет на сайте
Попробуй проверить скорость, если нажаты клавиши и скорость больше нуля, то проигрывай звук. Как-то так smile

Уроки по 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.
Лер_да_РимДата: Суббота, 14 Мая 2011, 00:16 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
А у меня здесь суть передвижения - сдвиг объекта. То есть
Code
if(keyboard_check(ord('A')))
   {
     if(place_free(x-4,x))
      x-=4
   };

И переменная скорости не используется.


Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

vsDaTavsДата: Суббота, 14 Мая 2011, 00:27 | Сообщение # 4
почетный гость
Сейчас нет на сайте
попробуем схитрить

if(keyboard_check_pressed(ord('A'))) and (keyboard_check_pressed(ord('D')))
{ниче не пишем - ниче не происходит}
else
if(keyboard_check_pressed(ord('A')))
{делаем звук}
else
if (keyboard_check_pressed(ord('D')))
{делаем звук}


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Суббота, 14 Мая 2011, 00:31
FadeBakerДата: Суббота, 14 Мая 2011, 00:38 | Сообщение # 5
JavaSE Game Developer
Сейчас нет на сайте
Quote (Лер_да_Рим)
А у меня здесь суть передвижения - сдвиг объекта. То есть

Попробуй создать переменную, допустим spd_snd, со значением 0.
Потом, когда нажаты клавиши, ставим значение переменной spd_snd = 1 (персонаж двигается), когда НЕ нажаты, тоесть отпущены, возвращаем переменную в исходное значение spd_snd = 0.
Теперь проигрываем звук, когда переменная spd_snd == 1, останавливаем, когда spd_snd == 0.
В Create:
Code
spd_snd = 0

В Step:

Code
if(keyboard_check(ord('A')))  
    {  
      if(place_free(x-4,x))  
       x-=4  
      spd_snd = 1
    } else {
       spd_snd = 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.
Лер_да_РимДата: Суббота, 14 Мая 2011, 00:47 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
ясно, но тут ведь тоже выйдет, что если нажаты обе клавиши (мало ли что игроку в голову взбредёт) - перс стоит, шаги стучат. Но всё равно спасибо. Мб попробовать сделать дополнительный запрос, что если нажаты обе клавиши...

и тут будет наложение звука одного на другой, так как он проигрывается каждый шаг.


Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.



Сообщение отредактировал Лер_да_Рим - Суббота, 14 Мая 2011, 00:54
vsDaTavsДата: Суббота, 14 Мая 2011, 10:57 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Quote
и тут будет наложение звука одного на другой, так как он проигрывается каждый шаг.

делаем счетчик, в шаге, и проверку нажатия клавиши каждый круг, к примеру, каждый 10 шаг.(в зависимости от времени проигрывания звука)

Quote
ясно, но тут ведь тоже выйдет, что если нажаты обе клавиши (мало ли что игроку в голову взбредёт) - перс стоит, шаги стучат

вы проверяли код, который я предложил? я сделал не со звуком, но у меня при нажатии обоих кнопок действие не происходит


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Суббота, 14 Мая 2011, 11:22
Made_In_USSRДата: Суббота, 14 Мая 2011, 12:25 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Может быть collision_line()&&speed>0 ?

Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
Лер_да_РимДата: Суббота, 14 Мая 2011, 21:10 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Made_In_USSR, повторяю, не существует переменной скорости.

vsDaTavs, сейчас попробую.

Добавлено (14.05.2011, 21:10)
---------------------------------------------
Так, тему можно закрыть, всё решилось проще. Можно просто опереться на анимацию, подредактировав звук шагов (я просто взял из контры одиночный шаг; немного однообразно, но всё же норм).

В степе:

Code
if sprite_index = s_go {if image_index = 1 or image_index = 4 or image_index = 7 {sound_play(snd_onestep)}};

И всё)

vasyan555 и vsDaTavs спасибо за уделённое время и помощь, по плюсу.


Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

FadeBakerДата: Воскресенье, 15 Мая 2011, 01:14 | Сообщение # 10
JavaSE Game Developer
Сейчас нет на сайте
Quote (Лер_да_Рим)
vasyan555 и vsDaTavs спасибо за уделённое время и помощь, по плюсу.

Всегда рад помочь!


Уроки по 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.
Made_In_USSRДата: Воскресенье, 15 Мая 2011, 14:01 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Quote (Лер_да_Рим)
Made_In_USSR, повторяю, не существует переменной скорости.

Просто для справки: переменная speed встроенная переменная, поэтому ее не может не быть. Далее переменная speed меняет свое значение при любом движении в любом нправлении.
Quote (Лер_да_Рим)
if sprite_index = s_go {if image_index = 1 or image_index = 4 or image_index = 7 {sound_play(snd_onestep)}};

Не совсем понятно как ты привязал все это к фреймам. Проще было бы на каждую оригинальную анимацию выделить по спрайту и плясать от них.
if sprite_index=s_go sound_play(snd_onestep);
Не правда ли короче? И читать удобнее.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
Лер_да_РимДата: Воскресенье, 15 Мая 2011, 15:56 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
Made_In_USSR, я знаю о переменной speed, просто она не используется. Не знаю, может она и меняется, наверняка ты лучше знаешь... Надо будет самому потестить. Просто я там не вижу как она может быть привязана.

Quote
Не правда ли короче? И читать удобнее.

Короче на полстроки, читать удобнее разве что для стороннего пользователя.

У меня каждое действие - отдельный анимированный спрайт со скоростью 0.3, 0.4 или вроде того. Спрайт ходьбы - 9 кадров. Попробуй так сделать и озвучить с помощью одинокого отстука каблука. Он будет звучать редко, тогда как визуально за анимацию делается два шага. Ну я озвучиваю трижды, это не мешает.


Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

Made_In_USSRДата: Воскресенье, 15 Мая 2011, 16:23 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
Quote (Лер_да_Рим)
Просто я там не вижу как она может быть привязана.

Как она может быть привязана уже сказано выше. Сдвиг обьекта даже на 1 пиксель дает значение переменной отличное от нуля.
Quote (Лер_да_Рим)
Короче на полстроки, читать удобнее разве что для стороннего пользователя.

А теперь представь как ты будешь править блок кода, в котором 100+ строк, для каждого из 10 (20?30?) персонажей. По три переменных, которые могут быть при всем этом иметь разные значения. Это практически одноразовый код, ты поймешь это когда просто взглянешь на эту кашу перед правкой smile Я на себе проверял.

Для справки: есть программы, которые в два клика пришьют к твоему звуку несколько секунд глухой тишины. Подогнать звук под длительность анимации все таки проще чем подогнать игру под длительность звука.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
vsDaTavsДата: Воскресенье, 15 Мая 2011, 19:29 | Сообщение # 14
почетный гость
Сейчас нет на сайте
точно точно.
И кстати хорошо если у всех ваших персонажей будет одинаковая ходка(чтобы не запутаться в кадре анимации), но даж откладывая эту мороку, кучу переменных создадите.


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Воскресенье, 15 Мая 2011, 19:32
Лер_да_РимДата: Вторник, 17 Мая 2011, 00:19 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
вообще я знаю, можно сделать тишину. То есть выйдет if sprite_index = s_go {sound_loop(snd_onestep+silence)}; так?

Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

NeZnayuДата: Вторник, 17 Мая 2011, 12:10 | Сообщение # 16
__танцуй!__
Сейчас нет на сайте
1) Поставить звукам в настройках 3 галочку (use media player)

2) При нажатии кнопок проверять:

Code
if !(sound_isplaying(snd_shagi))
{sound_play(snd_shagi);}


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Лер_да_РимДата: Вторник, 17 Мая 2011, 20:34 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
не, я уже проверял это, не рабит.

Дамы и господа, я представляю вам человека, которому н-а-с-р-а-т-ь! (с) Доктор Кокс.

NeZnayuДата: Вторник, 17 Мая 2011, 23:05 | Сообщение # 18
__танцуй!__
Сейчас нет на сайте
Лер_да_Рим, скинь свой звук - сделаю пример с тем кодом, который будет работать.

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
TheApKoTДата: Среда, 18 Мая 2011, 09:17 | Сообщение # 19
GML ProgrammeR
Сейчас нет на сайте
Code
if(!hspeed==0) {
sound_loop(snd_step); }

Что, так трудно догадаться? wink


Посоветуйте, где скачать VB6 :C


Сообщение отредактировал TheApKoT - Среда, 18 Мая 2011, 09:18
Dva_KotaДата: Среда, 18 Мая 2011, 14:41 | Сообщение # 20
заслуженный участник
Сейчас нет на сайте
Quote (Made_In_USSR)
Сдвиг обьекта даже на 1 пиксель дает значение переменной отличное от нуля.

Если движение сделано изменением координат, а не через переменные speed, hspeed (как у автора темы), то эти переменные не будут меняться, их значения будут равны 0.


Новый пример инвентаря! /20.06.2012/

Energy Wars
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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