RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2432071 views

Aleks Versus Moderator 04.09.2014 14:54 (11 years ago)

Jolly Roger:

Однако при обоих вариантах песня при смене индекса прерывается и начинается сначала…

запили проверку проигрывается в данный момент песня, или нет. Если проигрывается - не запускай мелодию, если не проигрывается - запускай. Не могу понять, в чём состоит сложность?
Можешь объяснить словами, чего ты пытаешься добиться? Чтобы на одной локации запускалась мелодия при одном значении переменной, и запускалась другая при другом значении, но при этом не раньше, чем кончится предыдущая? :/

Aleks Versus:

Можешь объяснить словами, чего ты пытаешься добиться? Чтобы на одной локации запускалась мелодия при одном значении переменной, и запускалась другая при другом значении, но при этом не раньше, чем кончится предыдущая?

Именно так.

Aleks Versus Moderator 04.09.2014 16:02 (11 years ago)

Jolly Roger,
тот пример, что я дал выше, вполне с этим справится. Чуть-чуть его изменить.
Если передаёшь значение на локацию в аргументе в начале присваиваешь это значение какой-нибудь левой переменной:

$choose_music = $args[0]

На локации счётчике:

if $curloc='имя_локации' and isplay('музыка_A.mp3')=0 and isplay('музыка_B.mp3')=0:
! если мы на текущей локации и ни одна из мелодий не проигрывается:
    if $choose_music='a': play 'музыка_A.mp3'
    ! по значению a проигрываем мелодию A
    if $choose_music='b': play 'музыка_B.mp3'
    ! по значению b проигрываем мелодию B
end

Вот мой код:
Локация-счетчик: ‘COUNTER’
if $curloc=‘Place’ and isplay(’Content/Sound/A.mp3’)=0 and isplay(’Content/Songs/B.mp3’)=0:
! если мы на текущей локации и ни одна из мелодий не проигрывается:
if $choose_music=‘a’: play ‘Content/Sound/A.mp3’
! по значению a проигрываем мелодию A
if $choose_music=‘b’: play ‘Content/Sound/B.mp3’
! по значению b проигрываем мелодию B
end

Локация: ‘Place’
IF $ARGS[0]= ‘A’:
CLA
*CLR
$choose_music=‘a’
ACT ‘Переход на B’:
GS ‘Place’, ‘B’
END
END
IF $ARGS[0]= ‘B’:
CLA
*CLR
ACT ‘Переход на C’:
GS ‘Place’, ‘C’
END
ACT ‘Возврат на A’:
GS ‘Place’, ‘A’
END
END
Нужная мелодия (песня ‘a’) играет, все отлично. Но как только я нажимаю ‘Переход на B’, на полсекунды звук пропадает, затем песня ‘a’, вместо того чтобы продолжаться, начинается с самого начала. Что-то у меня не так, а что - не пойму…

Jolly Roger,
у тебя в одном месте написано “Songs”, а в других “Sound”.

Nex:

у тебя в одном месте написано “Songs”, а в других “Sound”.

Это я ночью постил, с устатку, вот здесь только и ошибся. Адреса в программе правильные, испробовал все способы, в том числе гибкий плейлист - результат один и тот же. Не играет, как надо, и все. Конечно, это не критично, музыку можно запускать на другой локации, а после заходить в эту. Просто хотелось по-своему :)

Aleks Versus Moderator 05.09.2014 13:21 (11 years ago)

Jolly Roger,
я проверил этот код в чистом виде. Всё работает так, как ты хочешь. Проблема в другом. Найти ошибку без остального кода нереально. Может у тебя wait где-то стоит? Или сама мелодия кривоватая? :/

Буду разбираться тогда. Waitoв много где стоит… :) Спасибо!

Подскажите, пожалуйста, какое из условий более правильное:
IF a > b:
выражение1
ELSEIF a = b:
выражение2
ELSEIF a < b:
выражение3
END

ИЛИ
IF a > b:
выражение1
ELSEIF a = b:
выражение2
ELSE
выражение3
END

Jolly Roger,
обе правильные. Первая нагляднее.

А как можно облегчить работу с переменными, например, вот в такой вот ситуации:

if переменная=2 or переменная=3 or переменная=5 or переменная=10:
 происходит что-то
 и еще что-то, 
 и еще что-то
end

Можно ли сделать вот так, чтобы каждый раз не вводить “или переменная равна…”, а как нибудь типа

if переменная=2 or 3,5,10

RomaDova,
можно воспользоваться массивом.

! Где-нибудь заполняем массив.
KILLVAR 'закрытые_квартиры'
закрытые_квартиры[] = 2
закрытые_квартиры[] = 3
закрытые_квартиры[] = 5
закрытые_квартиры[] = 10

! В условии проверяем, находится ли значение в массиве.
IF ARRPOS('закрытые_квартиры', квартира) <> -1:
    ! Значение найдено в массиве.
    'Квартира номер <<квартира>> закрыта. На звонок никто не ответил.'
END

Привет всем, да.
Возник у меня небольшой затык, который я совсем не понимаю как разрешить, имея достаточно скудные познания в программировании.
Итак, суть вопроса:
Мне нужна небольшая, 5на5, карта, примерно как в рогаликах.
…..
…..
…..
…..
…..
По которой можно будет перемещать объект - @

Логика подсказывает, что нужно сделать сетку координат по Х и У, по которым и будет перемещаться объект. Только вот как это визуально вывести на экран в необходимом мне виде - ума не приложу. Если кто сможет помочь советом - буду признателен.

Ryo,
это уже делали много раз до тебя, и вопрос этот не раз задавался.

В двух словах, для реализации тебе нужно будет использовать массивы и циклы.

Ни по тому ни другому у нас внятных обучающих статей нет, так как хорошие текстовые игры, как правило, обходятся без этих программистских изысков. Некоторую информацию ты можешь нарыть на форуме, в разделе “Разработчикам”, в разделе “Документация”.

Вот ссылка из FAQ: Использование массивов, многомерные массивы

Массивы и циклы - предмет общий для большинства языков программирования, поэтому в интернете полно статей, разъясняющих эти понятия. Разобравшись в понятиях, для QSP остаётся лишь изучить синтаксис и примеры использования, а далее уже пользоваться самостоятельно.

Nex, спасибо. Я понимаю, что делали, но найти ничего толком не смог, вот и решил спросить. Пойду копать интернет.

Log in or Register to post comments.