Сайт Anivisual.net закрыт

Он продолжит функционировать в виде архива. Новые материалы добавлять нельзя.

Способы создания Главного меню (MainMenu)

Способы создания Главного меню (MainMenu)

Главное меню

Есть множество способов создания главного меню.
Рассмотрим пару из них.
1. Меню со своим фоном и созданием контейнера с однообразными кнопками. Почти то же, что и стандартное Ren'Py меню.
2. С использованием метода «Горячих точек» (ImageMap). Но добавление точек происходит иначе.

Метод первый: Создание контейнера с кнопками.

Нужно 3 вещи:
1. Фон
2. Пустая кнопка
3. Пустая наведённая кнопка.

Фон устанавливается стандартно, в options.rpy.
Код
mm_root = "back.png"
.

А для создания кнопок нам желательно иметь 2 кнопки: обычную и наведённую (hover)


Заходим в screens.rpy и опускаемся до 174 строки, далее, если необходимо заменяем код.
Код

screen main_menu:
     # Это заменяет другие меню.
     tag menu

     # Фон главного меню.
     window:
     style "mm_root"

     #Непосредственно кнопки
        has vbox
        textbutton _("Новая игра") action Start():
            area(50,10,310,70)
            background "but.png"
            hover_background "but_hover.png"

        textbutton _("Загрузка") action ShowMenu("load"):
            area(50,10,310,70)
            background "but.png"
.           hover_background "but_hover.png"

        textbutton _("Настройки") action ShowMenu("preferences"):
            area(50,10,305,70)
            background "but.png"
            hover_background "but_hover.png"

        textbutton _("Справка") action Help():
            area(50,10,305,70)
            background "but.png"
            hover_background "but_hover.png"

        textbutton _("Выход") action Quit(confirm=False):
            area(50,10,300,70)
            background "but.png"
            hover_background "but_hover.png"

textbutton - создание кнопки с текстом, который будет написан поверх неё..
action - действие, происходящее по клику.
area(50,10,305,70) - точки координат размещения кнопки и текста на ней.
Координаты:
Первая точка (50) - расположение кнопки по координате X.
Вторая точка (10) - расположение кнопки по координате Y.
Третья точка (300) - расположение надписи по координате X.
Четвёртая точка (70) - расположение надписи по координате Y.

background "but.png" - указывание обычной кнопки.
hover_background "but_hover.png" - указывание наведённой кнопки.

P.S. has vbox - создаёт контейнер с кнопками, все кнопки идут подряд сверху вниз. Количество кнопок может варьироваться.



Второй метод: Использование «Горячих точек» (ImageMap)

Как и в обычном ImageMap, нам нужно иметь 2 изображения:
1.Фон
2.С отличающейся областью наведения/выделения.


Код
screen main_menu:
    imagemap:
            ground "mmo.png"  
            hover "mmh.png"
            alpha True

            hotspot (262, 117, 497, 68) action Start()
            hotspot (314, 196, 447, 32) action ShowMenu("load")
            hotspot (314, 238, 445, 32) action ShowMenu("preferences")
            hotspot (298, 278, 463, 32) action Help()
            hotspot (270, 318, 490, 32) action Quit(confirm=False)


P.S.S. Ниже, стандартно на 218 строке, необходимо удалить/исключить из кода следующие строки:
Код
init -2 python:
    style.mm_button.size_group = "mm"


ground "mmo.png" - обычное фоновое изображение.
hover "mmh.png" - изображение с отличающейся областью выделения.
alpha True - разрешает прозрачность (альфа-канал).
hotspot - создание новой «Горячей точки».
(262, 117, 497, 68) - координаты «Горячей точки». Вычисляются иначе, чем в обычном ImageMap.
action - действие, которое происходит, по клику на выделенную область (горячую точку).

Вычисление координат:
1.Закидываем изображения в папку game, можно создавать свои папки, но не выше game.
2.Заходим в Ren'Py .
3. Запускаем свой проект.
4. Нажимаем комбинацию клавиш Shift + D (раскладка должна быть на английском).

5. В Developer Menu жмём по Image Location Picker.
6. Выбираем любое из двух нужных изображений.

7. Выделяем нужную область. С верхнего левого угла, до нижнего правого.

8. И в отличие от обычного ImageMap, здесь нам необходимы все четыре точки с Rectangle

9. В итоге получим что-то, вроде (262, 117, 497, 68). Их и необходимо вписать в координаты точки.
10. Повторяем действия 7, 8, 9 для остальных горячих точек.



Но здесь чего-то не хватает. Попробуем добавить летающие полоски, а также какой-нибудь движущейся туман.

Код
screen main_menu:
    imagemap:

#Добавляем круг, и заставляем его крутится по часовой стрелки.
        add "mm/poe4.png" at RotoZoom(0, 360, 10, 50, 1, 1, rot_repeat=True, rot_anim_timebase=True,
                opaque=False, xalign=-0.07, yalign=0.18)  

#Добавляем туманы и всякие полосочки, и прописываем им путь движения.
        add "mm/mut11.png" at Move((3.0, 1.0, 1.0, 1.0),
                (-2.0, 1.0, 1.0, 1.0),  
                50.0, repeat=True, bounce=True, subpixel=True )  
        add "mm/mut10.png" at Move((-0.1, 1.0, 1.0, 1.0),
                (3.0, 1.0, 1.0, 1.0), 20.0, repeat=True, subpixel=True )
        add "mm/mut8.png" at Move((-0.1, 1.0, 1.0, 1.0),
                (3.0, 1.0, 1.0, 1.0), 15.0, repeat=True, subpixel=True )
        add "mm/mut9.png" at Move((-0.1, 1.0, 1.0, 1.0),
                (3.0, 1.0, 1.0, 1.0), 20.0, repeat=True, subpixel=True )
        add "mm/mut6.png" at Move((-0.1, 1.0, 1.0, 1.0),
                (2.0, 1.0, 1.0, 1.0), 20.0, repeat=True, subpixel=True )
        add "mm/mut5.png" at Move((2.0, 1.0, 1.0, 1.0),
                (-0.1, 1.0, 1.0, 1.0), 20.0, repeat=True, subpixel=True )
        add "mm/mut4.png" at Move((2.0, 1.0, 1.0, 1.0),
                (-0.1, 1.0, 1.0, 1.0), 12.0, repeat=True, subpixel=True )
        add "mm/mut3.png" at Move((-0.1, 1.0, 1.0, 1.0),
                (1.15, 1.0, 1.0, 1.0), 13.0, repeat=True, subpixel=True )
        add "mm/mut2.png" at Move((-0.1, 1.0, 1.0, 1.0),
                (2.0, 1.0, 1.0, 1.0), 13.0, repeat=True, subpixel=True )
        add "mm/mut1.png" at Move((4.0, 1.0, 1.0, 1.0),
                (-0.1, 1.0, 1.0, 1.0), 30.0, repeat=True, subpixel=True )

        ground "mmo.png"  
        hover "mmh.png"
        alpha True

        hotspot (262, 117, 497, 68) action Start()
        hotspot (314, 196, 447, 32) action ShowMenu("load")
        hotspot (314, 238, 445, 32) action ShowMenu("preferences")
        hotspot (298, 278, 463, 32) action Help()
        hotspot (270, 318, 490, 32) action Quit(confirm=False)




P.S.S.S. При использовании второго метода, после первого запуска проекта, в папке game, создастся папка cache. В ней находятся вырезанные выделенный области. Если у вас не абсолютно прямоугольные области, файл, лежащий в данной папке можно подредактировать, стерев в нём всю область, которая лишняя в горячей точки.
К примеру я стёр области с левой стороны "кнопок", ибо они у меня не идеально-прямоугольные. В итоге получилась не прямоугольная область.

Но если бы я не отредактировал файл, было бы примерно так:



Файлы: меню с кнопками
Файлы: меню с ImageMap

И помните, встречают по одежке, не игнорируйте главное меню. Это практически первое, что видит игрок, и оно является лицом вашей визуальной новеллы. Так что, создайте поистине уникальное и прекрасное главное меню.

©Программист Celestial Novels
18
Декабрь
40
4.7
57473
Добавлять комментарии могут только зарегистрированные пользователи.

Комментарии к записи: 38

avatar
#1 DeXP
119
в 22:37 (30/Сен/2014)
0
Спасибо огромное! Крайне полезный материал. На англоязычных ресурсах как-то прошёл мимо меня, теперь вот наверстал упущенное. Спасибо а это!
avatar
#2 Ayuni
1161
в 10:00 (02/Окт/2014)
0
Крайне нужная вещь, большое спасибо за материал! :3
avatar
#3 RiokoRain
5267
в 16:16 (14/Мар/2015)
0
Ооочень полезная статья :3 Спасибо за информацию! Скажите пожалуйста, а SnowBlossom можно добавить по аналогии с той анимацией, которую ввели вы в примере? И какие параметры ему нужно прописывать? Ведь аналогичный код, вставляемый в саму новеллу, не подойдет..
avatar
#4 SashaFran
5075
в 14:20 (17/Мар/2015)
0
Вот такой вопрос , как примерно тем же способом стилизовать меню настроек ?
avatar
#5 RiokoRain
5267
в 17:51 (28/Мар/2015)
0
Как я понимаю, таким же способом и можно
Просто к кнопкам приписываются другие действия, их можно из screens.rpy взять
Если необходимо, могу расписать всё в подробностях, хотя если вы откроете и посмотрите, то увидите, что там всё прописано по аналогии
Единственное что, я не знаю, что делать с ползунками, сама в данный момент ищу решение этой проблемы
avatar
#6 HK
9233
в 11:08 (07/Июл/2015)
0
Неожиданно заметила, что у меня нету файла screens.rpy о.о поэтому создала его, но ничего все равно не выходит... QQ
avatar
#7 PlayerKiller
9604
в 07:40 (08/Июл/2015)
0
У вас наверное старая версия RenPy, у меня также было, скачайте новую версию.
avatar
#8 Rita16
11302
в 15:42 (22/Сен/2015)
0
а у мну не выходит ни фига
avatar
#9 ST_PhoeniX
14718
в 13:12 (02/Окт/2015)
1
Однако ж я полагаю, если меню настроек и сохр./загр. остаются прежними, то в них нужно что то дописать... Иначе кнопка назад в них тупо не работает )))
avatar
#10 anechka_5
15409
в 08:39 (11/Окт/2015)
0
Мне понадобилось много времени, но я сделала кнопку "назад" рабочей) Могу написать, как
avatar
#11 Overlord
19961
в 14:02 (13/Дек/2015)
0
Можете, пожалуйста, написать, как? happy
avatar
#12 anechka_5
15409
в 14:11 (13/Дек/2015)
0
Сегодня не смогу написать, завтра, ок?)
avatar
#13 Overlord
19961
в 14:22 (13/Дек/2015)
0
Без проблем)
avatar
#14 anechka_5
15409
в 15:07 (14/Дек/2015)
0
Сорян, чувак, есть некоторые проблемы с доступом к компьютеру. Либо напишу поздно, либо завтра. cry
avatar
#15 Overlord
19961
в 15:08 (14/Дек/2015)
0
Ладно, займусь пока галереей.
avatar
#16 anechka_5
15409
в 17:06 (14/Дек/2015)
0
Таки доступ к компу у меня появился, теперь могу таки написать, как я справилась с нерабочей кнопкой "назад".
Не знаю, может у вас это просто не сработает, но у меня рабит вроде)
Ладно, перейду к делу. В общем, найдите такую строчку в screen:
textbutton _("Назад") action Return()
Я в ней поменяла действие Return на ShowMenu("main_menu") в итоге выглядит так:
textbutton _("Назад") action ShowMenu("main_menu")
Пока работает) Может у этого и свои недочёты есть, но до большего я додумать не смогла, увы
Спасибо за терпение)
avatar
#17 Overlord
19961
в 18:46 (14/Дек/2015)
0
Спасибо большое! СОгласен, недочеты есть, но вроде как сойдет happy
avatar
#18 AnnaSchwarz
22221
в 20:36 (11/Янв/2016)
0
Эта статья мне не плохо помогла, но теперь возникли проблемы с быстрым меню под диалоговым окном в самой игре. Я знаю, где находятся ее данные, но никак не могу понять, как эти кнопки убрать вообще или переместить в бок. angry
avatar
#19 Overlord
19961
в 20:37 (13/Янв/2016)
1
Я НАШЕЛ СПОСОБ ВОЗВРАЩЕНИЯ КНОПКИ "Назад"!!!

screen main_menu:
imagemap:
ground "mmo.png"
hover "mmh.png"
alpha True

hotspot (262, 117, 497, 68) action Start()
hotspot (314, 196, 447, 32) action ShowMenu("load")
hotspot (314, 238, 445, 32) action ShowMenu("preferences")
hotspot (298, 278, 463, 32) action Help()
hotspot (270, 318, 490, 32) action Quit(confirm=False)

Так вот, в этот код следует добавить строчки:
tag menu

Итог:

screen main_menu:

# Это заменяет другие меню.
tag menu

imagemap:
ground "mmo.png"
hover "mmh.png"
alpha True

hotspot (262, 117, 497, 68) action Start()
hotspot (314, 196, 447, 32) action ShowMenu("load")
hotspot (314, 238, 445, 32) action ShowMenu("preferences")
hotspot (298, 278, 463, 32) action Help()
hotspot (270, 318, 490, 32) action Quit(confirm=False)

funny funny funny funny funny happy funny
avatar
#20 Averor
25390
в 18:24 (16/Фев/2016)
1
У меня проблема: поставил для теста эти кнопки, запустил проект, а вокруг кнопок белое пространство образовалось, что делать? -_-
avatar
#21 nimiod
6210
в 10:36 (21/Фев/2016)
0
Значит в картинке пространство залито белым цветом, используй граф. редактор (SAI, например) и убери белые области
avatar
#22 Averor
25390
в 20:58 (23/Фев/2016)
0
Убрал, не помогло, но ореол вокруг кнопок стал прозрачным
avatar
#23 Averor
25390
в 21:11 (26/Фев/2016)
0
Немного разобрался со своей проблемой, у меня весь фон главного меню покрывается пеленой цвета ## The color of a frame containing widgets. Может кто-нибудь помочь с этим?
avatar
#24 titan
27194
в 16:33 (07/Мар/2016)
0
P.S.S. Ниже, стандартно на 218 строке, необходимо удалить/исключить из кода следующие строки: ЧТО ЭТО!? ГДЕ ЭТО!? Я не понимаю сейчас голова в зарвется angry "Ниже, стандартно" - это rpy файл???
avatar
#25 titan
27194
в 16:53 (07/Мар/2016)
0
Помогите с кодом я всё испробовал все способы которые знаю. На сайте написано что надо что-то заменить но я не знаю что и где!
screen main_menu:
tag menu
imagemap:
ground "mods/Souma Yukihira/menu/Menu_ground.png"
hover "mods/Souma Yukihira/menu/Menu_hover.png"
alpha True

hotspot (250, 250, 400, 437) clicked Return("dv")
hotspot (1500, 500, 1650, 680) clicked Return("us")
label example3:
$ result = _return

if result == "dv":
jump dv10
elif result == "us":
jump us10

return
label dv10:
scene bg Menu_18+ with dissolve2
jump stert_111
label us10:
scene bg Menu_18- with dissolve2
label stert_111:

Это кнопка графическая предупреждает читателя 18+
avatar
#26 titan
27194
в 16:23 (09/Мар/2016)
0
Всё отлично! Списался со знакомым всё работает. нужно было добавить до screen main_menu1:
call screen main_menu1.

и modal True ставим после tag menu

(alpha True) надо переместить после hotspot
hotspot (250, 250, 400, 437)
hotspot (1500, 500, 1650, 680)
alpha True
avatar
#27 Bruzer
16173
в 18:54 (28/Мар/2016)
0
Видимо, я один настолько тупой, что вообще ничего из урока не понял. Что и куда вводить?...
avatar
#28 Hiro_Yosikava
36171
в 13:37 (18/Авг/2016)
2
Как добавить музыку в главное меню? Ну, чтобы она фоном звучала?
avatar
#29 makse3351
40889
в 16:24 (29/Авг/2016)
1
народ а как отредактировать папку cache
avatar
#30 arsher
57938
в 03:50 (14/Май/2017)
0
Про первый метод:
Координаты:
Первая точка (50) - расположение кнопки по координате X.
Вторая точка (10) - расположение кнопки по координате Y.
Третья точка (300) - расположение надписи по координате X.
Четвёртая точка (70) - расположение надписи по координате Y.
На самом деле так:
Первая точка (50) - расположение верхней левой вершины кнопки по координате X.
Вторая точка (10) - расположение верхней левой вершины кнопки по координате Y.
Третья точка (300) - число пикселей которые отступаются вправо.
Четвёртая точка (70) - число пикселей которые отступаются вниз.
Т. е. последние две точки это размеры кнопки: 3-я по оси Х, 4-я по оси У.

Может быть в статье и имелось ввиду именно это, но я ни черта не понял.
avatar
#31 faf51faf
57706
в 20:12 (23/Май/2017)
0
Большое спасибо за прекрасно изложенный материал! Я долго боролась с этим меню. Спасибо love
avatar
#32 NaokiPSK
73944
в 11:33 (10/Мар/2018)
0
Спасибо, очень помогло при создании интерфейса.:)
avatar
#33 sergey0804
65123
в 21:16 (10/Мар/2018)
0
Ребят помогите я пытаюсь сделать Второй метод: Использование «Горячих точек» (ImageMap)
screen main_menu:
imagemap:
ground "mmo.png"
hover "mmh.png"
alpha True

hotspot (165, 206, 360, 85) action Start()
hotspot (762, 219, 360, 77) action ShowMenu("load")
hotspot (157, 314, 395, 94) action ShowMenu("preferences")
hotspot (156, 428, 346, 86) action Help()
hotspot (914, 517, 253, 97) action Quit(confirm=False)

куда этот код вставлять??? Помогите пожалуйста
мой вк https://vk.com/sergey0804
avatar
#34 EllayaSan
82472
в 09:47 (18/Окт/2019)
1
"При использовании второго метода, после первого запуска проекта, в папке game, создастся папка cache" каким образом можно редактировать файлы в этой папке?
avatar
#35 u_eefi
236004
в 00:41 (09/Май/2020)
0
Ребят, сделал таким способом все меню включая сохранения/загрузку/настройки/главное. Теперь, когда в самой игре нажимаю на паузу, выскакиевает меню сохранений. Как сделать внутриигровое меню?(
avatar
#36 Vorn
301266
в 20:34 (29/Июн/2020)
0
Извините, но что с ссылками? Пишет что файл не обнаружен
avatar
#37 denisneonik
569761
в 13:39 (20/Дек/2021)
0
А как сделать рандомный фон меню?
И чтобы он менялся не по клику а рандомно с переходом?
avatar
#38 Katruna
29312
в 13:46 (20/Дек/2021)
0
Здесь подробно про это рассказывают.