Войти на сайт

Авторизация, ждите ...
×
  • Страница:
  • 1
  • 2

ТЕМА: Как из скрипта назначить глобальную переменную?

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71555

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
Сабж. Я пытался писать

$yres = 576 (где yres - имя переменной)

- не прокатывает. Глобальная переменная, которая назначается из эвента (или сама является ключом для эвента) - не меняется.
Последнее редактирование: 10 года 4 мес. назад от greyf24.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71556

  • Alexeyus
  • Alexeyus аватар
  • Вне сайта
  • Мастер
  • Сообщений: 134
  • Спасибо получено: 23
  • Разработчик
$yres = 576
$game_variables[1] = $yres

так как в руби = не просто оператор присваивания, но и оператор связывания.
при изменении $yres будет изменяться и $game_variables[1] (элемент класса глобального массива переменных).

вот именно в таких случаях появляются расхождения с оригинальным Ruby и RGSS, хотя один сделан из ребра другого. =)

+ теперь можно присваивать и не только числа (как это было в самом мейкере)!
$yres = 576
$game_variables[1] = $yres
$yres = "something"
$yres = Array.new(1,2,3)
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71557

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
[1] - номер переменной?
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71558

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
Alexeyus пишет:
$yres = 576
$game_variables[1] = $yres

так как в руби = не просто оператор присваивания, но и оператор связывания.
при изменении $yres будет изменяться и $game_variables[1] (элемент класса глобального массива переменных).

вот именно в таких случаях появляются расхождения с оригинальным Ruby и RGSS, хотя один сделан из ребра другого. =)

+ теперь можно присваивать и не только числа (как это было в самом мейкере)!
$yres = 576
$game_variables[1] = $yres
$yres = "something"
$yres = Array.new(1,2,3)

Что-то тут не пашет.
Я сделал ивент, который выводит текстом значения переменных - они равны нулю, то есть скрипт не смог назначить переменную.


Разобрался.

Оказывается, у меня в скрипте был порядок "назначить переменную и начать игру" - переменная обнулялась )
Правильный порядок - начать игру и назначить переменную.
Вложения:
Последнее редактирование: 10 года 4 мес. назад от greyf24.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71559

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 2 место1 место в ГотвОрганизатор конкурсов3 местоПроект месяца 1 местоУчительВетеранПисатель 3 местоПрограммист Ruby
выведено однажды опытным путем.

любые переменные, создаваемые в ивенте, являются локальными и исключительно локальными (и мейкеру плевать, хоть сто $ поставь вначале имени).
обращение к любой глобальной переменной, созданной заранее, приведет к этой глобальной переменной.
если глобальная переменная связана со значением локальной, то после очистки последней, скорее всего, просто обнулится.

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

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71560

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 2 место1 место в ГотвОрганизатор конкурсов3 местоПроект месяца 1 местоУчительВетеранПисатель 3 местоПрограммист Ruby
переменная $yres это не $game_variables[4981] (который используется на скриншоте). это вообще отдельная переменная, взятая с потолка, буквально. :blink:
Последнее редактирование: 10 года 4 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71561

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
DeadElf79 пишет:
выведено однажды опытным путем.

любые переменные, создаваемые в ивенте, являются локальными и исключительно локальными (и мейкеру плевать, хоть сто $ поставь вначале имени).
обращение к любой глобальной переменной, созданной заранее, приведет к этой глобальной переменной.
если глобальная переменная связана со значением локальной, то после очистки последней, скорее всего, просто обнулится.

да и вообще, зачем оно надо?

Объясню. переменная yres это не что иное как разрешение экрана по у.
У меня есть разрешения 576 по у и 768. И если мне надо отобразить в углу экрана рисунок (бюст героя), то привязка координаты по у зависит от разрешения в игре.

Данная проблема решена.
Последнее редактирование: 10 года 4 мес. назад от greyf24.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71564

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
Не решена.

Вот мой скрипт. В нем есть красный и зеленый блоки. Если yres равен 768 - должен выполняться красный.
Если равен 576 или 0 - должен выполняться зеленый блок.

Однако на деле ВСЕГДА выполняется красный, в игре всегда 0 и 1, а не 1 и 0. То есть структура блоков тут не как в паскале.

Где моя ошибка?

def command_new_game
if $yres = 768 then DataManager.setup_new_game
$game_variables[4981] = 0
$game_variables[4982] = 1
end


if $yres != 768 then DataManager.setup_new_game
$game_variables[4982] = 0
$game_variables[4981] = 1
end


close_command_window
fadeout_all
$game_map.autoplay
SceneManager.goto(Scene_Map)
end
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71565

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 2 место1 место в ГотвОрганизатор конкурсов3 местоПроект месяца 1 местоУчительВетеранПисатель 3 местоПрограммист Ruby
if $yres==768
Последнее редактирование: 10 года 4 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71568

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
DeadElf79 пишет:
if $yres==768

Не канает. Причина совсем не в этом. Я же написал выше - дело в блоках. Руби не считает

if $yres = 768 then DataManager.setup_new_game
$game_variables[4982] = 1
$game_variables[4981] = 0

end

блоком. В приведенной ниже конструкции всегда срабатывает нижнее условие. Если поменять местами - начнет срабатывать все равно нижнее.

Вопрос был, как заставить синие команды НЕ ВЫПОЛНЯТЬСЯ, если условие не выполнено. С точки зрения Руби, синие строчки не имеют отношения к красной.

def command_new_game

if $yres == 768 then DataManager.setup_new_game
$game_variables[4982] = 0
$game_variables[4981] = 1
end
if $yres = 768 then DataManager.setup_new_game
$game_variables[4982] = 1
$game_variables[4981] = 0
end
close_command_window
fadeout_all
$game_map.autoplay
SceneManager.goto(Scene_Map)
end

Вот тут всегда выполняется нижнее действие.
Последнее редактирование: 10 года 4 мес. назад от greyf24.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71569

  • JackCL
  • JackCL аватар
  • Вне сайта
  • Светлый дракон
  • Кролик вашей мечты
  • Сообщений: 711
  • Спасибо получено: 1004
  • Проект года 3 местоРазработчикПроект месяца 1 местоПроект года 2 место
greyf24 пишет:
Не канает.

Без разницы какой порядок - всегда выполняется условие переменная=768.

Это
if $yres = 768
всегда операция приравнивания, а не сравнения. Руби он такой.
При сравнении пользуйтесь ==

Последнее редактирование: 10 года 4 мес. назад от JackCL.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: greyf24

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71571

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • Победитель Сбитой кодировкиПроект месяца 2 местоПроект месяца 1 местоПисатель 3 место2 место Сбитая кодировка3 местоПроект месяца 3 местоПрограммист JavaScript 3 место Готв2 место
Объясняю популярно. Строка if $yres = 768 делает следующее:
1) Присваивает переменной $yres значение 768.
2) Проверяет, не равен ли нулю результат (а он заведомо не равен).
3) Если не равен - исполняет команды, стоящие после if. Если равен - пропускает их.
Поэтому - всё-таки причина в этом.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: greyf24

Как из скрипта назначить глобальную переменную? 10 года 4 мес. назад #71574

  • greyf24
  • greyf24 аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 65
  • Спасибо получено: 34
Вот теперь до меня дошло и все заработало :)
Спасибо :)
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73268

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • 2 место Победитель конкурсаОрганизатор конкурсовКомпозиторУчительОратор1 место в Готв3 место Готв
Решил спросить в этой теме, дабы не создавать новую.
Многие наверное знаю скрипт FA Interactive System 2.0.
Там есть оружие Hookshot, длину которого можно задавать в 241-ой строчке скрипта, т.е. HookLong = 11.
Как сделать, чтобы это значение было не фиксированное число, а задавалось переменной?
Вот сам скрипт yadi.sk/d/DLufmr4Xajah6
А вот - демка автора этого скрипта yadi.sk/d/7s7k7YQnajXxn
Последнее редактирование: 10 года 2 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73278

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Программист RubyПроект года 1 местоКоммерсантУчительПроект месяца 1 место
FalInt::HookLong = 'new value' #Вставь это после скрипта.
Просто переопределит константу, получишь ворнинг в консоли на который можно забить.
Или вопрос с подвохом?
Последнее редактирование: 10 года 2 мес. назад от Iren_Rin.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73281

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • 2 место Победитель конкурсаОрганизатор конкурсовКомпозиторУчительОратор1 место в Готв3 место Готв
Вставил, демка не запускается, вылетает :unsure:
Мне надо, чтобы в игре было что-то вроде прокачки этого Hookshotа. То есть например сначала берешь его и его длина действия составляет 3 клетки. Затем че-нить подобрал и его длина стала 4 клетки и тд.
Подумал, что неплохо было бы, чтоб длина задавалась переменной, а не числом. Тогда можно будет в игре создавать события, активирую которые переменная увеличивалась на одну единицу.
Знаю, что переменная в скриптах задается как $game_variables[n], где n - номер переменной. В скриптах полный ноль, поэтому действовал методом тыка.

Попытался тупо приравнять HookLong = $game_variables[1], но вылетает ошибка.
Тогда изменил эту строчку на $HookLong = $game_variables[1],
1130-ую строчку изменил на for i in 1..$HookLong
1202-ую строчку изменил на if !hook_moving? and @showing_hook and hook.index == $HookLong and
Ошибка не выдавалась, но HookShot вообще перестал работать:(

Тогда попробовал другой способ -
1130-ую строчку изменил на for i in 1..$game_variables[HookLong]
1202-ую строку - на if !hook_moving? and @showing_hook and hook.index == $game_variables[HookLong] and
Ну и 241-ую строку изменил на HookLong = 1
Ошибки тоже нету, но снова не работает :unsure:
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73282

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 2 место1 место в ГотвОрганизатор конкурсов3 местоПроект месяца 1 местоУчительВетеранПисатель 3 местоПрограммист Ruby
for i in 1..$game_variables[100]#HookLong
  @hookshot.push(Game_Hook.new(i))
end

строка 1130. управление теперь передано целиком на переменную 100, hooklong игнорится, ибо не нужен. не забудь назначить что-нибудь этой переменной в авторане!
Последнее редактирование: 10 года 2 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73283

  • Lipton
  • Lipton аватар
  • Вне сайта
  • Просветлённый
  • Ух ты!
  • Сообщений: 380
  • Спасибо получено: 671
  • Организатор конкурсовПрограммист Ruby2 место
Если 241 строке поставить HookLong = $game_variables[100], то скорее всего будет ошибка так,как к моменту обработки данного модуля переменные game_variables еще не определены.

Изменение в 1130 строке цикла (for) то же мало что даст, так как этот участок кода инициализация переменных. То есть даже если это часть кода сработает после полной инициализации game_variables и даже будет дано значение той самой game_variables[100], то этот клок кода срабатывает один раз.
То есть при каждом новом вызове (при изменении game_variables[100]) нужно будет (скорее всего =) ) заново вызывать initialize_int_tools.
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73284

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • 2 место Победитель конкурсаОрганизатор конкурсовКомпозиторУчительОратор1 место в Готв3 место Готв
Так тоже делал, щас проверил еще раз, не работает:(
Или я просто не понимаю значение этой фразы "не забудь назначить что-нибудь этой переменной в авторане!".
Надо как-то это в скрипте сделать? А то я просто через событие приравнял переменную к трем. :unsure:
Администратор запретил публиковать записи гостям.

Как из скрипта назначить глобальную переменную? 10 года 2 мес. назад #73285

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2731
  • 2 место Победитель конкурсаОрганизатор конкурсовКомпозиторУчительОратор1 место в Готв3 место Готв
При изменении 1130 строчки срабатывает звук, но ни анимации,ни действия нету. Видимо да, переменная не определена, поэтому ниче и не работает :cry:
То есть всё намного сложнее и проще бросить эту затею? :unsure:
P.S. сорри за два сообщения подряд, голова совсем уже не варит :blink:
Последнее редактирование: 10 года 2 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
  • Страница:
  • 1
  • 2
Модераторы: NeKotZima
Время создания страницы: 0.314 секунд