Как сделать?
…
Martin Doriel,
MSECSCOUNT() нельзя ничего “присвоить”, т.к. это не переменная, а функция, просто для удобства скобки чаще всего не пишутся. Использовать в выражениях ее можно как угодно.
Цитирую справку: “Числовое значение переменной / элемента массива может быть в интервале [-2147483648, 2147483647].”
2147483647 миллисекунд ~= 2 147 483 секунд ~= 35 791 минут ~= 596 часов ~= 24 дня (суток) игры.
MSECSCOUNT учитывает только время, проведенное в игре.
Nex
Я был не верно понят.
Martin Doriel:
переменной присвоить значение MSECSCOUNT
Чему? -переменной. Что сделать? -присвоить значение MSECSCOUNT.
По типу: press_1=MSECSCOUNT
Martin Doriel:
сделать с ней какие-нибудь операции (например: деление на еще одну переменную с MSECSCOUNT или их умножение
По типу: press=press_1*press_2 именно это выражение вызывало небольшой страх) (хоть и используется в основном в игре разность по времени, а не его умножение, просто предел интересен был)
Но ответ исчерпывающий.
Долго бился над одним кодом, но не все получилось. Наконец сдаюсь и обращаюсь к профессионалам. :)
Мне необходим кусочек кода, который будет добавлять через полсекунды в начало строки один символ (значение отдельной переменной, это уж я сам). А строк-то десять штук.
Скажем, при запуске локи в основном окне:
й
ы
с
и т.д.
Через 500 мс:
ый
аы
ос
……
Еще через 500 мс:
вый
ваы
рос
……
Как это можно сделать? Возможно, надо десять курсоров на каждую строку, которые через каждые полсекунды возвращаются в начало своей строки? :)
как вариант
#main
i = 1
:loop
*clr
func('string_end', 'первая строка',i)
func('string_end', 'вторая строка',i)
func('string_end', 'третья строка',i)
func('string_end', 'четвертая строка',i)
i += 1
wait 500
! устанавливаем ограничение по самой длинной строке
if (i <= len('четвертая строка')): jump 'loop'
-
#string_end
! показать n символов из конца строки
! $args[0] - строка
! args[1] - кол-во символов
$result = mid($args[0], len($args[0]) - args[1] + 1)
-
главное ограничение этого метода - он очищает экран перед выводом, так что если нужно выводить еще какой-то текст то он должен быть внитри цикла
Спасибо, werewolf. Сейчас попробую )
werewolf, все-таки код не работает так, как надо. В строке выводится лишь один символ. Обьясняю подробно, в надежде, что ты поможешь :)
Есть две локации. Первая:
#main
DISABLESCROLL=1
PLAY 'soound/main.mp3'
$result = mid($q[0], len($q[0]) - args[20] + 1)
!это выражение я, скорее всего, неверно вставил
'<<$q>>'
!а это первая строка. Пусть пока одна. Здесь должны выводиться произвольные значения переменной $q. Каждое новое значение (текстовое) должно прибавляться к предыдущему, только в начало строки. Так получается "бегущая строка".
Вторая локация:
#code
!рандомно выбираются значения переменных, как текстовые, так и числовые
$q=rand(1,15)
if $q=10:
$q='q'
end
if $q=11:
$q='w'
end
if $q=12:
$q='e'
end
if $q=13:
$q='r'
end
if $q=14:
$q='t'
end
if $q=15:
$q='y'
!!! твой код
i = 1
:loop
*clr
func('main', '<<$q>>',i)
i += 1
wait 500
if (i <= len('<<$q>>')): jump 'loop'
Укажи, пожалуйста, что неправильно.
тот код, что я приводил рассчитан на ситуацию, когда ты знаешь всю строку и просто выводишь ее начиная с конца
а у тебя при изменении получилось так что в переменной $q находится один символ - он и выводится
есть 2 варианта
1) изменить твой код так чтобы он генерировал сразу всю строку и сохранял ее в $q (только из локации main убери ‘<<$q>>’
-
а то будет выводится 2 одинаковых строки)
2) изменить принцип вывода из расчета что строки мы не знаем, а генерируем каждый символ отдельно
где-то так
# running_line
! это собственно функция, которая будет выводить строку
! кол-во символов который недо вывести
symbol_limit = 10
! кол-во строк которые надо вывести
line_limit = 10
line_i = 1
symbol_i = 1
:symbol_loop
line_i = 1
*clr
:line_loop
$lines[line_i] = func('generate_letter') + $lines[line_i]
*pl $lines[line_i]
line_i += 1
if line_i <= line_limit: jump('line_loop')
wait 500
symbol_i += 1
if symbol_i <= symbol_limit: jump('symbol_loop')
--- running_line ---------------------------------
# generate_letter
!функция которая будет генерировать следуюущую букву
$result = rand(1,15)
if $result = 10:
$result ='q'
elseif $result = 11:
$result ='w'
elseif $result = 12:
$result = 'e'
elseif $result = 13:
$result='r'
elseif $result = 14:
$result='t'
elseif $result = 15:
$result = 'y'
end
--- generate_letter ---------------------------------
werewolf, ОГРОМНОЕ спасибо. Все работает. Осталось подкорректировать самую малость - и работа сделана :=D
Я поставил 20 строк ((line_limit = 20)) и символы, заполняющие всю строку (symbol_limit = 105). Но появилась одна проблема. Как только каждая строка выведет 105 символов, она останавливается. Это совсем не катит) Необходимо, чтобы каждая строка генерировала символы БЕСКОНЕЧНО (или почти) и постоянно двигалась. Я думал так: сначала поставим огромный лимит символов (symbol_limit = 1000000). Но оказалось, что строка, как только дойдет до края основного окна, ПЕРЕНОСИТСЯ на другую строку. Это тоже не катит) Необходимо, чтобы символы двигались постоянно, но каждая строка занимала свое место. Я вижу два варианта решения проблемы:
- каким-то образом сделать так, чтобы строки “не видели” край окна и двигались себе вперед, до бесконечной длины;
- как только строка достигнет длины в 105 символов, каждый последний ее символ ВЫРЕЗАЕТСЯ одновременно с генерацией нового символа в начале строки. Таким образом, поддерживается постоянная длина в 105 символов, но строка постоянно движется и меняется. А ты что предложишь?
Во-первых, это у тебя на экране 105 символов. А у меня может быть 104
Во-вторых, второй вариант лучше. Только не вырезается символ, а переменной, в которой строка присваивается значение от второго символа и до конца.
Dark(Ol(U23)leneri):
Во-первых, это у тебя на экране 105 символов. А у меня может быть 104
Верно. Я все продумаю, не переживай )
Dark(Ol(U23)leneri):
Только не вырезается символ, а переменной, в которой строка присваивается значение от второго символа и до конца.
Нет, мне нужно, чтобы символ именно ВЫРЕЗАЛСЯ. Может, сможешь помочь с кодом этого вырезания?
в этом случае лучше всего изначально генерировать строку необходимой длины, а потом просто вырезать из нее нужные части для вывода
но для бесконечного движения текущий код не годится - использования wait блокирует любые действия, то есть игрок не сможет перейти на другую локацию, выбрать предмет и т.д.
для нормального функционирования нужно изменить принцип с использования wait на использование counter
пример такой реализации
werewolf:
но для бесконечного движения текущий код не годится - использования wait блокирует любые действия, то есть игрок не сможет перейти на другую локацию, выбрать предмет и т.д.
Игроку и не нужно будет выполнять никакие действия до конца игры, он будет наблюдать. Потом увидишь) За пример кода спасибо, но оттуда я возьму не все.
werewolf,
Можно пожалуйста, поподробней. Как получилось так, что ни одного wait нет, но задержка есть, более того, игрок может выбирать действия?
AntiPod:
Как получилось так, что ни одного wait нет, но задержка есть, более того, игрок может выбирать действия?
AntiPod, с помощью локи-счетчика :)
Благодарю всех помощников ) См. тему “Не-игры на QSP”.