Перейти к содержимому

Алекс__

Регистрация: 06 авг 2010
Offline Активность: 18 фев 2016 01:04
*****

#2967824 Визуальные новеллы своими руками.

Написано Алекс__ 16 Январь 2015 - 23:23

Кроме картинок для состояний idle и hover (обычная-не в фокусе / обычная в фокусе) надо добавить еще картинки для состояний selected_idle и selected_hover (активированная-не в фокусе / активированная-в фокусе):
vbox xalign .1 yalign .24:
            imagebutton:
                idle "Images/okno1.png"
                hover "Images/okno2.png"
                selected_idle "Images/okno2.png"
                selected_hover "Images/okno2.png" # или другую картинку для этого состояния
                action Preference("display", "window")          
                
vbox xalign .1 yalign .18:
            imagebutton:                  
                idle "Images/polniiekran1.png"
                hover "Images/polniiekran2.png"
                selected_idle "Images/polniiekran2.png"
                selected_hover "Images/polniiekran2.png"
                action Preference("display", "fullscreen")
http://www.renpy.org...tml#imagebutton
  • 1


#2900941 Визуальные новеллы своими руками.

Написано Алекс__ 07 Декабрь 2013 - 23:38

Всем привет!
Сделал перевод модуля запуска, и шаблона нового проекта (включая комментарии в файлах options.rpy и screens.rpy) для версии Рен'Пи 16.6.
Просьба ко всем кому интересно посмотреть перевод на предмет ошибок, опечаток и прочих неточностей...))
http://www.mediafire...translation.rar




Как это работает:
- Вам необходимо скачать и установить Рен'Пи версии 6.16, либо обновить уже установленную у вас версию до текущей.
- В скачаном архиве с переводом вы найдете два архива rus и russian. Архив rus необходимо разархивировать в папку *ваша папка с Рен'Пи*\launcher\game\tl - в ней уже будет несколько папок (в итоге должна появиться еще одна папка - rus) - это перевод модуля запуска. Архив russian необходимо разархивировать в папку *ваша папка с Рен'Пи*\templates - в ней также уже есть несколько папок (должна появиться еще и папка russian) - это шаблон нового проекта.
- Затем запускаем модуль запуска, заходим в настройки (слово preferences в правом нижнем углу модуля запуска) и выбираем из списка язык rus. Возвращаемся.
- На первой странице модуля запуска жмем "+ Создать новый проект", вводим название и выбираем шаблон russian.
  • 1


#2878161 Визуальные новеллы своими руками.

Написано Алекс__ 07 Август 2013 - 18:20

По словам PyTom'а рандом в Рен'пи достаточно рандомный (http://lemmasoft.ren...t=random#p75297), при этом, если перемотать игру назад (rollback), то рандомное значение выпадет тоже самое.

По поводу кода:
Если вы вызываете его командой call, то все должно работать нормально. Только поправьте
    if value1 == 1:
        $ otvet = value2
        return
    $ otvet = value1
(один знак равенства для присвоения значений)
  • 1


#2875977 Визуальные новеллы своими руками.

Написано Алекс__ 25 Июль 2013 - 20:16

Очень удобная программа, даже я разобралась х) Но всё равно мне что-то непонятна суть приёмов "прыжок" и "вызов".


Команда <jump> используется для перехода к другой метке кода, а команда <call> используется если надо исполнить код в какой-то метке и после этого вернуться обратно и продолжить выполнение программы с того места, откуда была вызвана команда <call>.

Подробнее здесь - http://www.animeforu...dpost&p=2850250
  • 1


#2817838 Визуальные новеллы своими руками.

Написано Алекс__ 18 Октябрь 2012 - 01:15

Команда sound воспроизводит звуковой файл один раз, для проигрывания музыки используйте команду music
play music "Shionari II.mp3"

  • 1


#2810022 Визуальные новеллы своими руками.

Написано Алекс__ 15 Сентябрь 2012 - 01:23

Попробовал перевести документацию для Галереи изображений - кому интересно, просьба посмотреть на предмет опечаток и прочих ошибок :rolleyes:
оригинал



Галерея изображений (ГИ)

ГИ - это экран, который позволяет игроку разблокировать изображения и затем просматривать эти изображения. Экран имеет одну или несколько связанных с ним кнопок, и каждая кнопка имеет одно или несколько связанных с ней изображений. Кнопки и изображения также имеют условия, которые определяют разблокированы они или нет.

ГИ управляются экземплярами класса Gallery. Каждый экземпляр класса может быть использован для нескольких экранов ГИ.

ГИ имеет одну или более кнопок, связанных с ней, кнопка имеет одно или более связанных с ней изображений, и каждое изображение имеет одну или более картинку, связанные с ним. Для кнопок и изображений могут быть назначены условия. Кнопка считается разблокированной, когда все назначенные для нее условия выполнены, и разблокировано хотя бы одно изображение, связанное с ней. Изображение считается разблокированным, когда все назначенные для него условия выполнены.


Создание ГИ происходит в четыре этапа.

1. Создание экземпляра класса Gallery.
2. Добавление кнопок и изображений в галерею, равно как и условий, определяющих будут ли кнопки и связанные с ними изображения считаться разблокированными. Этот процесс также состоит из нескольких этапов.


1. Объявление новой кнопки, путем вызова Gallery.button().
2. По желанию, назначение кнопке одного или более условий для разблокирования, путем вызова Gallery.unlock(), Gallery.condition(), или Gallery.allprior().
3. Объявление картинки, путем вызова Gallery.image() с одной или несколькими картинками в качестве аргумента. Или вызова более удобного метода Gallery.unlock_image().
4. По желанию, вызов Gallery.transform() для установки трансформаций, применяемых к каждой картинке.
5. По желанию, добавление одного или более условий, при выполнении которых изображение будет считаться разблокированным, путем вызова Gallery.unlock(),Gallery.condition(), или Gallery.allprior().

Дополнительные изображения могут быть добавлены к кнопке путем повторения этапов 3-5, а дополнительные кнопки – путем повторения всех пяти этапов.


3. Создание экрана галереи. Экран должен иметь фоновую картинку и какие-нибудь кнопки навигации, которые позволят пользователю посмотреть другие галереи или вернуться в главное либо дополнительное меню.
4. Добавление в главное ибо дополнительное меню кода для показа экрана галереи на дисплее.

Далее пример первых трех этапов:
init python:

    # Этап 1. Создаем объект галереи.
    g = Gallery()

    # Этап 2. Добавляем в галерею кнопки и изображения.

    # Кнопка, содержащая картинку, которая автоматически считается
    # разблокированной.
    g.button("dawn")
    g.image("dawn1")
    g.unlock("dawn1")

    # Эта кнопка имеет несколько связанных с ней картинок. Мы используем
    # unlock_image
    # так что нам не надо использовать оба .image и .unlock. Также, установим
    # трансформацию для первого изображения.
    g.button("dark")
    g.unlock_image("bigbeach1")
    g.transform(slowpan)
    g.unlock_image("beach1 mary")
    g.unlock_image("beach2")
    g.unlock_image("beach3")

    # Для следующих кнопок установлены условия, позволяющие
    # запрограммировать какое изображение считать разблокированным.
    g.button("end1")
    g.condition("persistent.unlock_1")
    g.image("transfer")
    g.image("moonpic")
    g.image("girlpic")
    g.image("nogirlpic")
    g.image("bad_ending")

    g.button("end2")
    g.condition("persistent.unlock_2")
    g.image("library")
    g.image("beach1 nomoon")
    g.image("bad_ending")

    # Для последних изображений в этих кнопках установлено условие,
    # так что они будут считаться разблокированными, только если пользователь
    # получит обе концовки.
    g.button("end3")
    g.condition("persistent.unlock_3")
    g.image("littlemary2")
    g.image("littlemary")
    g.image("good_ending")
    g.condition("persistent.unlock_3 and persistent.unlock_4")

    g.button("end4")
    g.condition("persistent.unlock_4")
    g.image("hospital1")
    g.image("hospital2")
    g.image("hospital3")
    g.image("heaven")
    g.image("white")
    g.image("good_ending")
    g.condition("persistent.unlock_3 and persistent.unlock_4")

    # Последние две кнопки содержат изображения, показывающие несколько
    # картинок одновременно.
    # Это можно использовать для показа картинки персонажа поверх фоновой
    # картинки.
    g.button("dawn mary")
    g.unlock_image("dawn1", "mary dawn wistful")
    g.unlock_image("dawn1", "mary dawn smiling")
    g.unlock_image("dawn1", "mary dawn vhappy")

    g.button("dark mary")
    g.unlock_image("beach2", "mary dark wistful")
    g.unlock_image("beach2", "mary dark smiling")
    g.unlock_image("beach2", "mary dark vhappy")

    # Установим перемещение (transition), которое будет использоваться при
    # смене изображений.
    g.transition = dissolve

# Этап 3. Создаем экран галереи.
screen gallery:

    # Убедимся, что он заменит собой главное меню.
    tag menu

    # Добавим фоновую картинку.
    add "beach2"

    # Сетка, состоящая из кнопок.
    grid 3 3:

        xfill True
        yfill True

        # Вызываем make_button для показа каждой кнопки.
        add g.make_button("dark", "gal-dark.png", xalign=0.5, yalign=0.5)
        add g.make_button("dawn", "gal-dawn.png", xalign=0.5, yalign=0.5)
        add g.make_button("end1", "gal-end1.png", xalign=0.5, yalign=0.5)

        add g.make_button("end2", "gal-end2.png", xalign=0.5, yalign=0.5)
        add g.make_button("end3", "gal-end3.png", xalign=0.5, yalign=0.5)
        add g.make_button("end4", "gal-end4.png", xalign=0.5, yalign=0.5)

        add g.make_button("dark mary", "gal-dark_mary.png", xalign=0.5, yalign=0.5)
        add g.make_button("dawn mary", "gal-dawn_mary.png", xalign=0.5, yalign=0.5)

        # Экран, отвечающий за возврат в главное меню. Также, он может
        # перенаправлять на другой экран галереи.
        textbutton "Return" action Return() xalign 0.5 yalign 0.5
Этап 4 варьируется в зависимости от того, как структурирована ваша игра, один из вариантов – добавить следующую строку:
textbutton "Gallery" action ShowMenu("gallery")
в код экрана главного меню.

class Gallery(self)
Этот класс предоставляет возможность создавать ГИ, обслуживая блокировку изображений, предоставляя действие, которое может показать одно или более изображений, и предоставляя метод, который создает кнопки, использующие это действие.


transition
Перемещение (transition), которое используется при смене изображений.

locked_button
Картинка, используемая make_button по умолчанию для заблокированных кнопок.

hover_border
Активная рамка, которую по умолчанию использует make_button.

idle_border
Неактивная рамка, которую по умолчанию использует make_button.

Action(name)
Действие, которое показывает изображения, связанные с указанной кнопкой.

allprior(self)
Условие, которое считается выполненным, если были разблокированы все предыдущие изображения, связанные с данной кнопкой.

button(name)
Создает новую кнопку с названием name.


name

Название создаваемой кнопки.



condition(expression)
Условие, которое считается выполненным, если выражение (expression) имеет значение Истина (True).


expression

Строка – выражение на языке python.



display(*displayables)
Добавляет в текущую кнопку новое изображение, содержащее одну или более картинку (displayables).

image(*displayables)
Добавляет в текущую кнопку новое изображение, содержащее одну или более картинку (displayables).

make_button(name, unlocked, locked=None, hover_border=None, idle_border=None, **properties)
Создает кнопку, которая показывает изображения, связанные с данным названием кнопки.


name

Название создаваемой кнопки.


unlocked

Картинка, которая отображается, когда кнопка разблокирована.


locked

Картинка, которая отображается, когда кнопка заблокирована. Если не задано, то вместо нее используется поле locked_button объекта галереи.


hover_border

Картинка, которая отображается поверх разблокированной кнопки, когда на нее наведен курсор. Если не задано, то используется поле hover_border объекта галереи.



idle_border

Картинка, которая отображается поверх разблокированной кнопки, когда на нее не наведен курсор. Если не задано, то используется поле idle_border объекта галереи.


Дополнительные ключевые аргументы становятся параметрами стиля создаваемого объекта кнопки.



transform(*transforms)
Применяет трансформации (transforms) к последнему зарегистрированному изображению. Должен вызываться с тем же количеством трансформаций, сколько картинок связано с изображением. Трансформации применяются к соответствующим картинкам.

Если трансформация не задана, то используется трансформация
по умолчанию.

unlock(*images)
Условие, которое содержит одно или более названия изображений и считается выполненным, если игрок видел все названные
изображения. Названия изображений должны быть заданы в строковом формате (as strings).

unlock_image(*images)
Удобный метод, который является эквивалентом вызова image и unlock с одинаковыми параметрами. Он позволяет показать изображение, если оно уже было увидено ранее.

(images) должно быть определено в строковом формате, задавая названия изображений.


  • 1


#2769422 Визуальные новеллы своими руками.

Написано Алекс__ 26 Апрель 2012 - 00:59

to dalamar1: посмотрите здесь
https://www.animefor...dpost&p=2619869

  • 1


#2760016 Визуальные новеллы своими руками.

Написано Алекс__ 02 Апрель 2012 - 22:20

Вся беда в использовании DynamicDisplayable - не мучайся с ним, воспользуйся screen'ами
screen my_countdown:
    timer 1 repeat True action If( (my_time > 0 ) , [ SetScreenVariable('my_time', my_time - 1), Play("my_channel", "tick.ogg")], [Hide('my_countdown'), Jump(label_to_jump_to)] )
    if my_time > 5:
        text str(my_time) xpos 20 ypos 20 size 47
    elif my_time > 0:
        text str(my_time) xpos 20 ypos 20 size 47 color "#c00"
        
    
###################################################
# The game starts here.
label start:

    show screen my_countdown (my_time=10, label_to_jump_to="toolate")
    "Hurry up!"
    hide screen my_countdown
    "Right in time."
    return
label toolate:
    "It's too late"
    jump start

Этот таймер можно использовать много раз, он не отсчитывает время пока игрок находится в меню, но если его сохранить и загрузиться из сохранения, то отсчет времени начнется с самого начала.
  • 1


#2759812 Визуальные новеллы своими руками.

Написано Алекс__ 02 Апрель 2012 - 19:00

to Айон XIV
Не все так просто...
http://lemmasoft.ren...ountdown#p97448
  • 1


#2696298 Визуальные новеллы своими руками.

Написано Алекс__ 17 Август 2011 - 15:20

Понятно, <say> - это функция Рен'пи
$ renpy.say ( e, "Hey, it is me talking!")
e "Hey, it is me talking!"

Если в качестве имен переменных использовать слова, зарезервированные Рен'пи для своего использования (названия функций и т.п.), то это приведет к ошибкам (не стоит называть переменные "jump", "int", "str", "show" и т.д.) Здесь, как в том анекдоте, лучше всего использовать "длинные_и_понятные_имена_переменных".
  • 1


#2696276 Визуальные новеллы своими руками.

Написано Алекс__ 17 Август 2011 - 12:35

Ошибка в синтаксисе. Может неправильно использовать команду джамп?


Угу, вся функция "countdown" написана в блоке <python>, т.е. все команды должны быть на питоне. Эквивалентом команды <jump> будет <renpy.jump ("end")>


Ах, да - самое главное! Не забудьте в самом начале блока "end" скрыть с экрана этот самый "countdown" <hide countdown> - иначе условие о том, что время истекло будет всегда выполнено, и программа "бесконечно" будет совершать переход к блоку "end".
  • 1


#2695925 Визуальные новеллы своими руками.

Написано Алекс__ 15 Август 2011 - 21:26

http://lemmasoft.ren...3&hilit=textbox
http://lemmasoft.ren...t=9812&p=127872
Здесь превосходные руководства по настройке внешнего вида игры, они конечно на английском, но с примерами кода и картинками (все очень доступно и в большом количестве)...))
  • 1


#2695110 Визуальные новеллы своими руками.

Написано Алекс__ 12 Август 2011 - 17:42

Ммм, хорошо...
Руководство вы прочитали... вот еще ссылка на пояснение: что же такое блоки и как правильно делать отступы (на английском, за-то с картинкой) http://www.renpy.org...t_are_blocks.3F
Еще полезные ссылки (правда, тоже на английском) с примерами кода:
http://www.renpy.org/wiki/renpy/FAQ
http://www.renpy.org...eference_Manual
http://www.renpy.org...html/index.html

Теперь ваш код и ошибки. Рен'пи всегда говорит в какой строке он находит ошибку и что именно ему не нравится - это здорово облегчает исправление ошибок. Здесь примерное описание возможных ошибок http://www.animeforu...dpost&p=2689628

$ e = Character(u'Сомокава', color="#c8ffc8". show_side_image=image("image/somokava_urezanaya.png", xalign=0.0, yalign=1.0))
здесь проблема в том, что стоит точка перед <show_side_image> - при перечислении каких-либо параметров, значений в списках и т.п. всегда используется запятая (точка используется только в числах для отделения целой части от дробной)

eside "Привет, меня зовут Сомокава"
под "eside" подразумевается персонаж, который должен быть объявлен также как и "e", если этого не сделать, то Рен'пи не будет знать о таком персонаже и выдаст ошибку (что-то вроде "name 'eside' is not defined" - имя переменной 'eside' не объявлено). Т.е. код может выглядеть так
$ e = Character(u'Сомокава', color="#c8ffc8") # персонаж без картинки
$ eside = Character(u'Сомокава', color="#c8ffc8", show_side_image=image("image/somokava_urezanaya.png", xalign=0.0, yalign=1.0)) # персонаж с картинкой

$ povname = renpy.input(u"Как вас зовут?") or u"Аноним"
в этой строке просто присваивается значение переменной "povname", путем ввода текста с клавиатуры или значение по умолчанию 'u"Аноним"'.
Если есть желание использовать значение этой переменной в качестве имени персонажа, то сначала необходимо в блоке <init:> объявить "такого персонажа"
init:
    $ povname = "" # объявление переменной со значением по умолчанию "" (пусто), если не объявить переменную ДО ее использования, то это вызовет ошибку
    $ pov = DynamicCharacter("povname", color=(192, 64, 64, 255) # специальный персонаж у которого в качестве имени используется переменная (это не просто <Character>, это <DynamicCharacter> - персонаж с возможностью изменять имя)
http://www.renpy.org...tions/Character
http://www.renpy.org...ynamicCharacter


<…> #что значат эти кавычки?

такие кавычки были использованы автором руководства, что бы показать, что в этом месте может или должен быть какой-то код (при наборе кода игры такие кавычки нигде не используются), в моем посте такие кавычки использованы для того, что бы команды Рен'пи не путать с "именами_переменных_и_проч".

Так же не могу понять схему когда выбираешь варианты ответов.

http://www.renpy.org....D0.B1.D1.83.21
В руководстве про это написано, просто прочитайте еще несколько раз (с новой информацией всегда так - чем больше перечитываешь, тем понятнее становится)
menu:   # начало блока меню, все что будет в этом блоке должно иметь дополнительные отступы (пробелы в начале строк)
        "Хорошая возможность задать вопрос." 						# Фраза, которая будет в текстовом окне (можно ее не писать, если она не нужна)
        "А как это выглядит с точки зрения игрока?": 				# Пункт №1 меню. Каждый пункт меню также является блоком, должен заканчиваться двоеточием, и все строки внутри этого блока должны иметь дополнительный отступ
            "Я поднял руку, показывая, что у меня есть вопрос."      # Результаты: здесь может быть текст, изменение картинок, изменение значений переменных, перепрыгивания к соответствующим меткам
            <…>            # вот это просто надо стереть за ненадобностью
        "Ничего не спрашивать":                                      # Пункт №2 меню.
            pass

И не совсем понимаю реализацию разветвления сюжета.

Различные ветки сценария можно поместить в отдельные метки
label start:
    menu:
        "Первый путь":
            jump first_path
        "Второй путь":
            jump second_path

label first_path:
    # код для одной ветки сценария
    jump the_end

label second_path:
    # код для другой ветки сценария
    jump the_end

label the_end:
    "The end."
Перемещение между метками осуществляется при помощи команды <jump>
http://www.renpy.org...BD.D0.B8.D1.8F.
Если правильно расставить отступы в блоках, то никаких косяков быть не должно.
  • 1


#2694322 Визуальные новеллы своими руками.

Написано Алекс__ 09 Август 2011 - 20:07

to MrStitch:

а вот редактор запускаться наотрез отказался

JEdit требует установленную java, скачать ее можно с сайта разработчика - http://www.java.com/...nload/index.jsp
(http://www.renpy.org/latest.html).
Для редактирования скрипта подойдет любой текстовый редактор, например "блокнот" (Ворд не подойдет, т.к. добавляет форматирование текста).
Со старыми версиями Рен'пи шел в комплекте редактор "scite", который ничего не требовал...))
Можете скачать одну из старых версий (до 6.9.х, кажется) и скопировать из нее папку с редактором. Его можно запускать как отдельную программу, а затем в нем открывать файлы скрипта для редактирования.
http://www.renpy.org/release_list.html
Также http://lemmasoft.ren...it=os+windows+7 - может пригодится.
  • 1


#2693056 Визуальные новеллы своими руками.

Написано Алекс__ 04 Август 2011 - 19:15

Ммммм... Продолжим "издеваться" над кодом в файле "aliens.py":

class Bomb(pygame.sprite.Sprite):

... ... ...

     	if self.rect.bottom >= 590: # надо поставить значение в пикселях, достигнув которого, бомба взорвется (0 - это самый верх игрового поля)



class Score(pygame.sprite.Sprite):

... ... ...

        self.rect = self.image.get_rect().move(10, 550) # положение надписи со счетом

  • 1