Форум » » Специальная тема для гостей и вновь прибывших. Здесь вы можете задавать свои вопросы. (продолжение) » Ответить

Специальная тема для гостей и вновь прибывших. Здесь вы можете задавать свои вопросы. (продолжение)

Серый Волк: Дорогие гости, если у вас есть небольшие "одноразовые" вопросы, пожалуйста, не стоит заводить под каждый из них отдельную тему на форуме, задавайте их здесь. Также, тут можно просто поздороваться или даже представиться. Спасибо :)

Ответов - 269, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All

Saint: Серый Волк пишет: это не долго Когда как... Иногда целых шесть, или даже семь, часов приходится ждать!!!

Иоанн: Замечал игры, где в FireURQ совершенно другой интерфейс и кнопки расположены по другому) Как это заменить? Просто в описании изменения скина FireURQ самому - не нашел это) Не подскажете?

Серый Волк: Иоанн, а можно назвать такие игры? Тогда нам будет проще, возможно, в разных играх внешний вид делался по-разному. Например в "Гробах" ( http://urq.plut.info/node/360) для реализации нестандартного отображения текста и кнопок используется оператор textpane_left. Про него написано здесь: http://ifwiki.ru/FireURQ:Особенности_реализации_URQL#.D0.94.D1.80.D1.83.D0.B3.D0.BE.D0.B5 "Есть возможность изменять положение и размер главного текстового поля. Для этого служат переменные textpane_left, textpane_top, textpane_width и textpane_height" (с) Если не ошибаюсь, то эту фишку подсмотрел в одной из демок возможностей фурки: 1) http://ifwiki.ru/files/Fireurq_demo.qsz 2) http://ifwiki.ru/files/Decodemo.qsz 3) http://ifwiki.ru/files/Skindemo.qsz


Иоанн: Спасибо. А можно ли менять/окрашивать часть картинки в какой-либо цвет в зависимости от изменения каких либо числовых параметров?

Ajenta: Иоанн Можно. Всё можно. Подготовьте картинки с разным окрашиванием и выводите в зависимости от этих параметров.

Иоанн: Просто например хотелось бы взять карту, а потом в зависимости от числовых данных - окрашивать один из её секторов в, например, красный цвет. Но если заранее раскрашивать картинки и вставлять их в зависимости - то цельной карты не получится. Будут какие-то куски и обрывки...

vito: Иоанн пишет: Просто например хотелось бы взять карту, а потом в зависимости от числовых данных - окрашивать один из её секторов в, например, красный цвет. Но если заранее раскрашивать картинки и вставлять их в зависимости - то цельной карты не получится. Будут какие-то куски и обрывки... Стандартный подход - общая картинка разбивается на мелкие фрагменты, для альтернативно окрашиваемых фрагментов делаются дубли. Вся картинка в целом выводится как набор фрагментов-декораторов (про декораторы см. здесь: http://ifwiki.ru/FireURQ:%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_URQL#.D0.94.D0.B5.D0.BA.D0.BE.D1.80.D0.B0.D1.82.D0.BE.D1.80.D1.8B), если надо поменять фрагмент картинки - соответствующий фрагмент-декоратор отключается и вместо него выводится дубль. Ключевые факторы успеха - правильный подбор размера картинки под экран и умение считать пиксели декораторов. Займусь саморекламой - пример реализации схожей задачи (правда, более простой) есть в моей игре "ШБ": http://urq.plut.info/shb В файле shb.qst найдите метку :prcInit_Picture для начала, правда, неплохо было бы доиграть хотя бы до эпизода с метанием крысы, чтобы понять, каков результат работы кода.

frodo: В "Памяти Вселенной" (глава 5) я делал так: существует одна большая картинка - план помещений, и один декоратор-прямоугольник полупрозрачного цвета, который окрашивает участок плана в светло-красный цвет и, таким образом, указывает на позицию игрока. Создаются они как-то так: [pre2] ОБЩ_ПЛАН_x = 230 ОБЩ_ПЛАН_y = 50 ОБЩ_ПЛАН_color = 0x80FF0000 ... :host_plan_add if not exist_dec_host_plan then exist_dec_host_plan = 1 _& decoradd dec_host_plan (ОБЩ_ПЛАН_x,ОБЩ_ПЛАН_y, 20) IMAGE image_plan _& decoradd dec_host_pos (ОБЩ_ПЛАН_x,ОБЩ_ПЛАН_y, 10) RECT 1,1,ОБЩ_ПЛАН_color end [/pre2] Обратите внимание: координата "z" у dec_host_pos меньше, то есть этот декоратор будет на переднем плане. В пятой главе имена локаций имеют вид "этаж6_комната5", "этаж7_комната5" или "этаж5_коридор3", и в конце каждой локации вызывается процедура, которая парсит "current_loc" и меняет координаты и размеры декоратора "dec_host_pos". Упрощенно это выглядит так: [pre2] :host_plan_parse ; добавляем к разделителям знак подчеркивания tokens_delim=tokens_delim+"_" tokens current_loc if token2 = "комната1" then x = 180 & y = 160 & w=45 & h = 55 if token2 = "комната2" then x = 140 & y = 180 & w=38 & h = 35 ... ; Перерисовываем указатель с новыми параметрами: if exist_dec_host_plan then _ decordel dec_host_pos _& decoradd dec_host_pos (ОБЩ_ПЛАН_x+x,ОБЩ_ПЛАН_y+y, 10) RECT w,h, ОБЩ_ПЛАН_color end [/pre2] Конечно, Вы можете указывать положение и размер прямоугольника непосредственно из локации и не связываться с оператором tokens - я использовал этот подход только потому, что переделывал кусок старого кода. В самой игре код немного сложнее - кроме создания плана есть еще процедуры для удаления и скрытия, да и для полупрозрачного прямоугольника позиция не всегда четко определена.

Иоанн: Спасибо

Иоанн: А как сделать так, что бы при нажатии на кнопку менялись данные переменных? А то у меня что-то не получается btn <метка>[(param1, param2, ...)], <текст на кнопке>, как по инструкции Например у меня есть 1,Вещь и 1,Предмет. И при нажатии на первую кнопку надо увеличить Вещь на 1, а предмет уменьшить на 1. А если жать на вторую - то соответственно будет наоборот. При этом ты перейдешь на другую локацию. Как это сделать? А то у меня выходит то постоянно плюсовение переменных вне заивимости от нажимания на кнопки, то оно добавляет кусок кода в инвентарь, считая его за новый предмет (например: Вещь,) ) или не показывает кнопку. Заранее благодарю

frodo: Сам пока не проверял но, так как параметры преобразовываются в переменные, имя которых начинается с имени локации, то имя локации следует начинать с буквы, а не цифры. Могу предложить такое: [pre2]:старт btn лок1(1), Вещь btn лок1(-1), Предмет end :лок1 вещь = вещь + лок1_1 предмет = предмет - лок1_1 ... end[/pre2]

Иоанн: Дело такое, что там решаешь вопрос и в зависимости от выбранного варианта - должны изменяться переменные. А с этой локации, где ты выбираешь, ты возвращаешься на предыдущую локацию(основную в этой игре). И да. Можете подробнее разъяснить смысл кода, расписанного вами. Именно во второй его части - когда переходишь на лок1. Что оно делает? лок1_1 например что такое?

fireton: Иоанн, вам надо внимательно почитать документацию на фурку.

frodo: Иоанн, В качестве параметров могут передаваться числа, строки и переменные. В целевой локации они будут доступны как переменные вида <имя локации>_<порядковый номер параметра>. Например, представим такую кнопку: btn location(1, "text", x), Дальше.. Если ее нажать, в локации location будут доступны следующие переменные: location_1 будет равна 1 (первый параметр); location_2 будет равна "text" (второй параметр); location_3 будет равна переменной x. Возвращаясь к нашему примеру. Если пользователь нажал кнопку "Вещь", первым параметром (лок1_1) передается 1. Это эквивалентно следующему: [pre2] вещь = вещь + 1 предмет = предмет - 1 [/pre2] Если пользователь нажал кнопку "Предмет", лок1_1 будет равна -1. Т.е. сложение заменяется вычитанием и наоборот (минус на минус дает плюс) [pre2] вещь = вещь + (-1) предмет = предмет - (-1) [/pre2]

Иоанн: Спасибо большое)

Иоанн: А если я например хочу так: !.Основная локация. Жмем кнопку и переходим к Событию. Затем: !!.Событие. Три варианта ответа, изменяющие переменные, но все три кнопки ведут назад в Основную локацию, лишь меняя переменные. А учитывая, что события будут разные... и переменных, при нажатии, меняется за раз больше чем 5 штук... То вот тем же путем получится это реализовать?

vito: Иоанн пишет: А если я например хочу так: !.Основная локация. Жмем кнопку и переходим к Событию. Затем: !!.Событие. Три варианта ответа, изменяющие переменные, но все три кнопки ведут назад в Основную локацию, лишь меняя переменные. А учитывая, что события будут разные... и переменных, при нажатии, меняется за раз больше чем 5 штук... То вот тем же путем получится это реализовать? А зачем возвращаться из события сразу в основную локацию? Почему не сделать, скажем, так: [pre2] :основная_локация btn событие, кнопка end :событие btn пер(1, 2, 3, 4, 5), вариант1 btn пер(6, 7, 8, 9, 10), вариант2 btn пер(11, 12, 13, 14, 15), вариант2 end :пер переменная1=пер_1 переменная2=пер_2 переменная3=пер_3 переменная4=пер_4 переменная5=пер_5 goto основная_локация end [/pre2]

frodo: Иоанн, передача параметров в кнопках хорошо работает, если, в целом, должен получиться один и тот же результат, но параметризованный. Если же результат для каждой кнопки свой, то и вести они должны на разные локации. Пример параметризации: [pre2]:старт btn локация("кошка", "мяукает", "Мяу!"), Погладить кошку. btn локация("собака", "лает", "Гав!"), Погладить собаку. btn локация("рыбка", "разговаривает", "Бульк!"), Погладить рыбку. end :локация животное = локация_1 действие = локация_2 звук = локация_3 pln - А как эта #%животное$ #%действие$? pln - Эта #%животное$ говорит "#%звук$" end[/pre2] Разные действия предполагают разные решения: [pre2]:интро pln Нужно получить 4 литра. :результат pln В 5-литровой банке #банка5$ литров. pln В 3-литровой банке #банка3$ литра. if банка5 = 4 then pln Победа! & end btn перелить_3_5, Перелить из 3-литровой банки в 5-литровую. btn перелить_5_3, Перелить из 5-литровой банки в 3-литровую. btn наполнить("банка5", 5), Наполнить 5-литровую. btn наполнить("банка3", 3), Наполнить 3-литровую. btn опорожнить("банка5"), Опорожнить 5-литровую. btn опорожнить("банка3"), Опорожнить 3-литровую. end :опорожнить #%опорожнить_1$ = 0 goto результат :наполнить #%наполнить_1$ = наполнить_2 goto результат :перелить_3_5 delta = 5 - банка5 if delta > банка3 then delta = банка3 банка5 = банка5 + delta банка3 = банка3 - delta goto результат :перелить_5_3 delta = 3 - банка3 if delta > банка5 then delta = банка5 банка3 = банка3 + delta банка5 = банка5 - delta goto результат[/pre2] (Внимательный программист заметил бы, что перелить_3_5 и перелить_5_3 тоже можно параметризовать и свести к одной локации, но для примера оставим. Если кому интересно, улучшенный вариант загадки здесь)

Kalten: Приветствую! Такая ситуация: Имеется два случайных числа M =RND15 и N =RND15 Как можно сделать так, чтобы если M больше N, то выполнялся б один код, а если наоборот N больше M, то иной? p.s. это все касаемо платформы AKURQ1.28pre6. Буду очень признателен за ответ!

Ajenta: Kalten пишет: Приветствую! Такая ситуация: Имеется два случайных числа M =RND15 и N =RND15 Как можно сделать так, чтобы если M больше N, то выполнялся б один код, а если наоборот N больше M, то иной? p.s. это все касаемо платформы AKURQ1.28pre6. Буду очень признателен за ответ! На любой платформе я так понимаю будет следующее if M > N then p Код который будет else p Другой код причём код внутри ифа следует писать через & например (как я обычно делаю): if M > N then _ p Код который будет & _ p Ещё какой-то код else _ p Другой код



полная версия страницы