Форум Anivisual закрыт. Вы не можете создавать новые темы или писать ответы. Форум будет работать в режиме архива.
Пользователи · Поиск по форуму · · · Регистрация

Помощь по Ren'Py (Вопрос\Ответ)

Admin

#1
Сюда пользователи сайта могут писать вопросы о тех или иных функциях движка Ren'Py, а мы попытаемся на них ответить:)

СОНЦЕ

#946
pirsus, я думаю тебе нужен layered image


Код

layeredimage batgirl:
    always:
        'images/batgirl/regular/body1.png'

    group bottom:
        attribute pants default:
            'images/batgirl/regular/pants.png'            

    group top:
        attribute jaket default:
            'images/batgirl/regular/jaket.png'            

    group heads:
        attribute head1 default:
            'images/batgirl/regular/head1.png'
        attribute head2:
            'images/batgirl/regular/head2.png'



тогда первая голова вызывается через
show batgirl

а вторая
show batgirl head2

РТФМ

в любом случае назначать изображение на переменную по хорошему можно только на фазе init только один раз

pirsus

#947
Так у меня получается просто 2 разных изображения с разными названиями и batgirl продолжит выводиться с первой головой.
Т.е. предыдущие label не изменит.

А можно ли объекту image присвоить значение переменной?

Код

  $ batgirlhead1 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head1.png')

    image batgirl = "batgirlhead1"

Я прописал вот так.  Игра не видит ошибки, но при выведение image batgirl, пишет, что "изображение не найдено"

Добавлено (24.12.2020, 17:30)
---------------------------------------------
Прописал вот так.
Ошибки нет.

image batgirlhead1 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head1.png')

    image batgirlhead2 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head2.png')

    image batgirl = "batgirlhead1"

Но опять же, как только в код в середину повести добавляешь
   image batgirl = "batgirlhead2"

Вторая голова начинает выдаваться сразу же с начала игры.

Добавлено (24.12.2020, 17:31)
---------------------------------------------
Не могу понять, почему с изменением имени игрока в процессе игры всё работает корректно, а с ссылкон на изображение - нет

СОНЦЕ

#948
Цитата pirsus ()
Я прописал вот так.  Игра не видит ошибки, но при выведение image batgirl, пишет, что "изображение не найдено"

Вот так будет работать:

Код

init python: #вместо знака доллара
    batgirlhead1 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head1.png')

    image batgirl = batgirlhead1 #убрать кавычки
Сообщение отредактировал СОНЦЕ - Четверг, 24/Дек/2020, 16:48

pirsus

#949
Заметил странную закономерность:

Если 

image batgirl = "batgirlhead1"

прописать в блоке Init, то голова меняется сразу, не зависимо от места команды
image batgirl = "batgirlhead2"
даже если перед ней прописать if с выполнением условий.

А елси прописать 

image batgirl = "batgirlhead1"

уже в label start, то изменение вообще не происходит.

image batgirl = "batgirlhead2" просто не исполняется, даже когда должна по коду.

Добавлено (24.12.2020, 17:57)
---------------------------------------------
Не работает.



Код
init python:

    batgirlhead1 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head1.png')

    batgirlhead2 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head2.png')

    image batgirl = batgirlhead1

Init:
    
    обычные изображения


Код

  I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.

File "game/images.rpy", line 23: expected statement.
    Init:
        ^

File "game/images.rpy", line 21: invalid syntax
    image batgirl = batgirlhead1
                 ^
    

Ren'Py Version: Ren'Py 7.3.5.606
Thu Dec 24 17:55:02 2020

СОНЦЕ

#950
pirsus, я повторюсь, потому что в данном контексте это очень важно
image можно назначать

  • только в блоке init
  • только один раз


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

СОНЦЕ

#951
Цитата pirsus ()
Не работает.
строчка
image batgirl = batgirlhead1
должна стоять вне индентации init python. 4 пробела убери тобишь
Сообщение отредактировал СОНЦЕ - Четверг, 24/Дек/2020, 17:11

pirsus

#952
Теперь он мне совсем чушь выдает

Код
I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.

File "game/images.rpy", line 1: expected statement.
    Init python:
         ^

File "game/images.rpy", line 21: expected statement.
    Init:
        ^

Ren'Py Version: Ren'Py 7.3.5.606
Thu Dec 24 18:47:10 2020


Код

  Init python:

    batgirlhead1 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head1.png')

    batgirlhead2 = LiveComposite(
        (625, 850),
        (0, 0), 'images/batgirl/regular/body1.png',
        (0, 0), 'images/batgirl/regular/trusi.png',
        (0, 0), 'images/batgirl/regular/lifon.png',
        (0, 0), 'images/batgirl/regular/pants.png',
        (0, 0), 'images/batgirl/regular/jaket.png',
        (0, 0), 'images/batgirl/regular/head2.png')

Init:

    image batgirl = batgirlhead1

Ultra_Scream

#953
pirsus, исправь первую букву в init на маленькую вместо большой, я предполагаю, в этом ошибка. Python - язык регистрозависимый. Ren'Py, будучи написанным на нем, сохраняет это свойство.
Сообщение отредактировал Ultra_Scream - Четверг, 24/Дек/2020, 18:08
Зродились ми великої години
З пожеж війни, із полум'я вогнів
Плекав нас біль по втраті України
Кормив нас гнів і злість на ворогів

СОНЦЕ

#954
Цитата pirsus ()
чушь выдает
Init с большой буквы. Надо с маленькой.

апд: о, меня опередили, спасибо Ultra_Scream,
Сообщение отредактировал СОНЦЕ - Четверг, 24/Дек/2020, 18:16

СОНЦЕ

#956
по выданной части кода неочевидно почему, но подозреваю image по прежнему объявляется несклолько раз. не важно через переменную или напрямую через LiveComposite конструкцию. и так низя nbaka

буду настаивать на layeredimage

Код


define head = 1

layeredimage batgirl:
    always:
        'images/batgirl/regular/body1.png'

    group bottom:
        attribute pants default:
            'images/batgirl/regular/pants.png'            

    group top:
        attribute jaket default:
            'images/batgirl/regular/jaket.png'            

    if head == 2:
            'images/batgirl/regular/head2.png'
    elif head == 3:
            'images/batgirl/regular/head3.png'
    else:
            'images/batgirl/regular/head1.png'



таким образом картинка везде вызывается одной и той же переменной

show batgirl

а в месте где нужно подменить голову нужно вместо переназначения картинки, переназначить переменную

$head = 2

pirsus

#957
Работает!

каеф! nlove  nlove  nlove

Добавлено (26.12.2020, 19:43)
---------------------------------------------
Снова нужна ваша помощь.
На этот раз застрял с imagemap



Код
label ggturn:

    $ result = renpy.imagemap("images/fight/fightback.png", "images/fight/fighthover.png", [
    (1680, 255, 175, 170, "headpunch"),
    (1680, 455, 175, 170, "bodypuch"),
    (1680, 655, 175, 170, "legpunch"),
    ], focus="imagemap")
    if result == "headpunch":
        $ hqhp -= 5
        $ hqhp -=
        [fightpower]jump harleyturn
    elif result == "bodypunch":
        $ hqhp -= 3
        $ hqhp -=
        [fightpower]jump harleyturn
    elif result == "legpunch":
        $ hqhp -= 3
        $ hqhp -=
        [fightpower]jump harleyturn

label harleyturn:
    $ harleypunch = renpy.random.randint(1,12)
    $ gghp -=
    [harleypunch]jump ggturn


Собственно вот сам код.
Ошибок не выдает.
Визуальную карту выводит.
Но кнопки неактивны. Не реагируют на наведение и нажатие

И сразу второй вопрос:
Если я из значения переменной вычитаю значение другой переменной,
Запись в квадратных скобках правильная?

Код
$ hqhp -= [fightpower]

Добавлено (26.12.2020, 20:04)
---------------------------------------------
Апдейт:

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

AxelK

#958
Такой вопрос: а способен ли ренпай гипотетически оперировать, например, 2 окнами?
То есть из основного окна игры, нажав кнопку, открыть еще одно со своим размером и с каким-нибудь интерактивным экраном внутри.

СОНЦЕ

#959
pirsus, пока отвечу на простое

Цитата pirsus ()
Если я из значения переменной вычитаю значение другой переменной,
Запись в квадратных скобках правильная?

Код
$ hqhp -= [fightpower]


неправильная, такая запись должна выдавать ошибку в любом случае, хотя имеет определенный философский подтекст ^^
Код
$ hqhp -= fightpower

думаю то что ты хочешь сделать делается вот так.

Остальную часть вопроса поизучаю как руки дойдут. Честно говоря такая реализация даже если и заработает устарела лет на 10 ^^ мне даже интересно откуда ты такое берешь nhehe

Цитата AxelK ()
Такой вопрос: а способен ли ренпай гипотетически оперировать, например, 2 окнами?
То есть из основного окна игры, нажав кнопку, открыть еще одно со своим размером и с каким-нибудь интерактивным экраном внутри.

можно, у меня например, командами питона паралельно запускался произвольный .exe с нужным окошком. возможно это можно сделать более изящно

AxelK

#960
СОНЦЕ, произвольный exe это не совсем то, что нужно. На всякий случай уточню, что имелось в виду создание окна с доступом к общим разделам памяти. Как самый простой пример: небольшое отдельное окошко, отображающее текущие предметы в наличии, то есть, при использовании их в игре, чтоб то второе окно могло реагировать на изменения инвентаря. Хотелось бы в идеале уткнуться в какой-то код, умеющий примерно это.
Поиск: