Как сделать?
…
То что надо. Отлично работает. Благодарю.
Если я проведу десяток часов в игре, а потом попробую переменной присвоить значение MSECSCOUNT и сделать с ней какие-нибудь операции (например: деление на еще одну переменную с MSECSCOUNT или их умножение…) Игра не рухнет?
Переменные могут хранить теоретически бесконечно большие числа здесь? или все же есть предел? Просто страшно использовать эту функцию)
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 блокирует любые действия, то есть игрок не сможет перейти на другую локацию, выбрать предмет и т.д.
Игроку и не нужно будет выполнять никакие действия до конца игры, он будет наблюдать. Потом увидишь) За пример кода спасибо, но оттуда я возьму не все.