Visual-Novel-V2 (Java Final using LibGdx)
This is a visual novel that is created using LibGdx. LibGdx is a open sourced, cross platform game development framwork that is community driven.
Information about the Game
This is my first introduction into some of the new and advanced methods that LibGDX provided. There is a lot that I am still unaware about but I will try my best to give as much description about the project as I can.
This game contains:
- Adjustable window
- A menu Screen
- 8 different scenes
- One character
- A bunch of dialog
These are most of the classes displayed in the project and their relationships and extensions of classes.
Requirements
There are only a few requirements that you will need to easily run this project.
- First you will need intelliJ. I currently am using the ultimate edition, but the community edition should suffice.
- You will need java 8 or above.
Installation
Once you cloned the repository to your Intellij, One of the first things you want to do is open the project tab on your left -> click on the desktop folder -> click on the src folder -> click on the com.mygdx.game.desktop folder -> open the DesktopLauncher Class.
Once you have the DesktopLauncher class open, right next to the hammer there is a add/edit configurations button, click on that.
Another window should pop up, here we need to set this class as a application configuration. Click on the + sign, look for application and open application.
Click on the + sign, look for application and open application.
Copy the information that is written to parameter. The click apply and ok.
You should be able to run the desktopLauncher Class to try out the visual novel in IntelliJ. This method is universal to both mac and windows.
Known bugs
This project was made with java version 12. If you are using a java version that is older than the projects java te functionality of the program may run into issues. To fix the problem, You may have to modify the build.gradle files found inside of the core and desktop folders.
Credit
Main Contributors to the project is Lee Stemkoski who is the writer of Java Game Development with LibGDX. I personally did more of the code modifications.
Main art contributors — Slaiinex
Story Boarding — Myself (DarrenIsaacson) and (Yandere)
Создай свою визуальную новеллу, не умея рисовать/создавать музыку и программировать.
Не врите, наверняка каждому из вас в голову приходила такая идея, от которой по всему телу бежали мурашки, от которой дрожали руки и перехватывало дыхание. Это точно мог быть фильм или видеоигра. Что-то, что бы вызвало резонанс в обществе и обсуждалось во всех СМИ. Наверняка такое было с каждым – особенно если вы писатель.
Разумеется, мало у кого есть миллионы долларов для создания ААА-игры или фильма с лучшими актерами, чтобы полностью раскрыть свою задумку. По этой причине многие авторы пробуют донести свою мысль или эмоцию посредством жанра визуальной новеллы.
– Но как быть, – спросите вы, – если я совсем не умею программировать, и при этом у меня нет знакомых художников/музыкантов/кодеров?
– Ответ прост: создать новеллу на сайте «BestNovels», как это сделал я.
Что такое «BestNovels» и с чем их едят?
«BestNovels» – сборник интерактивных историй, который открылся совсем недавно, что дает возможность новым авторам быстро занять лидирующие позиции в ТОПе (если ваша история в достаточной степени хороша, разумеется).
Жанры. В каталоге сайта присутствует 8 жанров на выбор: Боевики и приключения; романтика; детективы и триллеры; ужасы и мистика; фэнтези; юмор и расслабление; фантастика; фонд SCP. При этом, создавая новеллу, вы можете выбирать до 3-х включительно – например, фэнтези и романтика, как сделал я.
Кроссплатформенность. Безусловным плюсом сайта «BestNovels» является тот факт, что проходить любимые визуальные новеллы можно не только на компьютере, но и на телефоне, когда едешь в общественном транспорте, не испытывая никаких подвисаний и даже не переворачивая свое устройство, – а это значительно расширяет аудиторию автора.
Конкурсы. Создатели сайта активно привлекают новых авторов, в связи с чем часто проводятся конкурсы с крупными призовыми (а это ли не возможность для молодых рассказчиков?). Причем номинаций очень много, начиная от создания статей и заканчивая летсплеями.
Свобода. Модераторы зорко следят за тем, чтобы не пропустить некачественный контент на сайт, но вместе с этим к авторским правам здесь относятся не так жестко, как в том же Steam. По этой причине автор на 90% свободен в выборе музыки, фонов и артов персонажей, что позволяет полностью придерживаться первоначальной задумки, не опасаясь того, что вас могут забанить.
Сообщество. У сайта есть свой телеграмм канал, где разработчики оповещают о конкурсах, новостях и отвечают на вопросы, а другие авторы делятся своим опытом и подсказывают что-либо новичкам.
Мозговой штурм. Данный плюс распространяется не столько на сайт, сколько на жанр визуальной новеллы в целом. Если вы делаете новеллу из уже готовой истории в виде, например, рассказа (как сделал я), то для вас это будет отличной тренировкой и мозговым штурмом – необходимо же придумать развилки и то, куда могла бы привести история, если бы что-то пошло по-другому. Это опять-таки заинтересует читателя и заставит его по-другому посмотреть на вашу историю –– например, кто-то злобно высказался по поводу вашей работы из-за ее финала, и вы тут же отсылаете его на «BestNovels», где он сможет сам решить, как поступит протагонист.
Как работать с «BestNovels»?
Пожалуй, еще нигде и никогда нельзя было так просто создать свою визуальную новеллу, как на сайте «BestNovels». Все, что вам нужно, как автору и разработчику, сводится к написанию истории и подбору для нее музыки и фонов. Вам не нужно знать никаких языков программирования! Только свобода творчества и фокусировка на том, что вы умеете делать лучше всего – писать.
В движке сайта все интуитивно понятно и до безобразия просто (говорю как человек, раннее создававший модификацию для «Бесконечного лета», где все-таки приходилось учить обозначения и некоторые команды).
Кликом создаете клеточку (т. е. сцену), ставите фон, персонажа (если нужно) и музыку. Пишете текст и вуаля – отправная точка вашей истории готова!
Нужен выбор? Без проблем. Нажимаете соответствующую кнопку в виде развилки, пишете варианты ответа/действия и ставите направление, куда перекинет игрока в зависимости от его решения – вправо, влево, вниз или даже вверх.
А что, если после выбора игрока нужно отправить не в следующий эпизод, а, скажем, на другую линию вообще? Не беда, есть такой замечательный инструмент как «портал», где мы прописываем номер столбца и строки, куда отправится игрок.
– А что насчет переменных? Можно ли делать в новелле романтические линии, от которых будет зависеть концовка? – настойчиво спрашиваете вы.
– Конечно, – отвечу я.
Создаете в соответствующей вкладке переменную. Например, «отношение», как делал я. Затем создаете развилку и привязываете ее к нужной переменной – направо пойдешь, +1 получишь; налево пойдешь, ничего хорошего не получишь.
И именно здесь на сцену выходит такой элемент как «рельсы». Вы связываете их с переменной; затем движок сам высчитывает сколько всего очков можно набрать; и затем вы делаете полноценную сюжетную развилку, связанную с переменной! Например, если герой не сблизился с героиней вообще (0 очков), игра отсылает его налево; если сблизился средне (1 очко), отсылает его вниз; и наконец если сблизился как надо (2 очка), отсылает его направо. Как вы поняли, это прямо влияет на концовку.
Наконец ваше детище готово. Что делать дальше? Отправлять на модерацию, прописав аннотацию, выбрав жанры и поставив обложку. Модераторы проверят и вынесут вердикт, после чего ваша новелла попадет на сайт.
Подводя итог, скажу, что создание полноценной визуальной новеллы на движке «BestNovels» – процесс хоть и монотонный (особенно, когда дело доходит до расставления музыки и проверки общей работоспособности), но весьма интересный. Очень приятно сделать какую-то сцену, потом открыть ее и увидеть, что все в ней – текст, музыка, виузал, – работает так, как ты хотел, погружает в невероятную атмосферу и не дает оторваться от чтения. Ведь согласитесь, книга кажется куда увлекательнее, если на фоне играет подходящая музыка.
Дополнительные ссылки
- Работа с движком – (ссылка).
- Работа с переменными, рельсами, порталами – (ссылка).
- Моя группа ВК – «записки из подполья» (больные мысли, чувственные стихи, пронзительная проза).
- Моя новелла – «Элегия апокалипсиса».
Содержание
- Как создать визуальную новеллу
- Выбор движка
- Настройка RenPy
- Создание игры: от идеи к релизу
- Сюжет
- Сцены и диалоги
- Структура истории
- Музыка
- Графика
- ЦГ или CG?
- Как создать свою новеллу на компьютер
Как создать визуальную новеллу
Статья подготовлена специально для «гейм джема визуальных новелл от Индикатора», поэтому большая часть советов нацелена помочь тем, кто взялся за создание игры в рамках джема, но также будет полезна всем, кто решил создать свою визуальную новеллу.
Всем привет! Меня зовут Артур, я автор визуальной новеллы «Final Fantasy IX: Children of Terra». Это был мой первый опыт создания игры в этом жанре, поэтому не ждите от меня экспертного мнения. Я лишь поделюсь с вами личным опытом и дам советы, а в конце статьи то же самое сделают мои коллеги, которые принимали участие в подобных джемах.
Выбор движка
Для создания визуальной новеллы подойдёт Unity, RPG Maker, TyranoBuilder и RenPy. Вкратце рассмотрим каждый из них.
RPG Maker MV/MZ (платный) – простейший движок, предназначенный для создания JRPG, но на нём также можно создать и новеллу. Здесь легко показывать фоны, спрайты, выводить диалоги. И всё это без знаний программирования, но при этом функционал сильно ограничен. Для того, чтобы расширить функции, можно использовать плагины, написанные на JAVA Script, но этот язык довольно трудный. Намного сложнее, чем Python, который использует RenPy.
TyranoBuilder (платный) – ещё один движок для создания ВН без знаний программирования. Довольно простой, но вместе с тем ограниченный в функциях. Можете рассмотреть его, если уж совсем лень что-то кодить.
RenPy (бесплатный) – безусловный лидер среди движков для создания ВН. Разобраться в нём совсем нетрудно. Запускается даже на маломощных ПК. Собственно я, как и большинство разработчиков в сфере ВН, использовал именно RenPy, поэтому дальше речь пойдёт о нём. Игры, созданные на RenPy, можно портировать на android и Linux.
Настройка RenPy
После скачивания распакуйте архив в нужную вам директорию.
После скачивания запустите программу. Иконка renpy для 64-битных систем и renpy-32 для 32-битных соответственно.
Откроется окно. Сейчас программа работает на английском. Чтобы переключить язык на русский, заходим в настройки.
Выбираем в списке наш великий и могучий 🙂 А затем кнопку «Вернуться» слева.
Чем мне ещё нравится RenPy, здесь есть обучение, в котором представлены все базовые фукнции, оформленные в виде новеллы. Запускаем проект «Обучение».
Сам проект также запускается на английском. Переходим в меню и выбираем русский.
Затем выбираем «Начать».
Обучение поделено на разделы, что очень удобно. При необходимости, если что-то забыли, всегда можно заглянуть в нужный раздел или даже сохраниться в интересующем месте. Обучение базовым функциям займёт не более получаса.
Всё наглядно показано, а сам код можно скопировать и вставить в свой проект.
А теперь перейдём к созданию собственного проекта. Закройте обучение и вернитесь к лаунчеру. Нажмите «+ Добавить новый проект».
Программа попросит выбрать директорию, где будет храниться ваш проект.
Выбираем и нажимаем «Продолжить». Затем вводим имя проекта (на английском), нажимаем «Продолжить». Затем выбираем разрешение. Можете смело выбирать 1920х1080. Если разрешение монитора игрока окажется меньше, игра «ужмётся» под разрешение его монитора без каких-либо искажений. Но стоит учитывать, что чем больше разрешение игры, тем большего размера требуется графика, а это увеличивает объём игры. Лично я использовал 1280х720 и, по словам игроков, при запуске во весь экран на мониторах 1920х1080 игра почти не теряла в качестве.
Нажимаем «Продолжить». Следующий шаг — выбор цветовой палитры для интерфейса. Можете выбрать любой понравившийся. При желании и должных знаниях в программировании интерфейсу можно будет придать уникальный стиль.
Снова нажимаем «Продолжить» и немного ждём. Теперь в лаунчере должен появиться ваш проект. В моём случае это «First game».
Можете запустить его и проверить работоспособность.
Чтобы открыть код вашего проекта, нажмите «Все файлы сценария».
Программа потребует выбрать текстовый редактор, в котором вы будете писать код игры. Лично для меня самым удобным показался jEdit. Поэтому предлагаю его.
После установки вы сможете открыть код вашей игры и редактировать его.
В плане синтаксиса язык Python прост и лаконичен. Он не содержит избыточных конструкций. С другой стороны, язык очень строгий: даже лишний пробел в программном коде может привести к ошибке.
Обычно программа показывает вам ту строчку, где находится ошибка. В моём случае это строка 18.
Узнать о самых частых ошибках можно в этом видео: https://youtu.be/b0ClHn7tews
ВК не очень любит подгружать видео с других ресурсов, поэтому иногда может выдавать, что автор ограничил доступ к видео. В таком случае для просмотра видео просто перейдите по ссылке на Ютуб.
Чтобы открыть директорию проекта, выберите «game» в лаунчере. Директория поделена на разделы, куда вы можете помещать ресурсы игры: графика, музыка и т.д.
Для удобства рекомендую создавать в каждой директории свои папки. Для спрайтов одна, для фонов другая и т.д. В коде вам не придётся прописывать пусть к файлу, что очень удобно. Достаточно указать название файла, поэтому следите за тем, чтобы имена не повторялись, особенно если файлы в разных папках. Лично мне потребовалось в «Final Fantasy IX: Children of Terra» 23 папки, чтобы всё рассортировать.
Настало время приступить к созданию игры. Сперва уясните для себя, какова ваша роль в проекте: написание сценария, музыки, кода игры или создание графики. После того, как вы определились, найдите недостающих членов команды. Может быть и так, что вы – художник, но при этом хотите также написать сценарий. Такое часто бывает, но в рамках джема лучше распределить обязанности между разными людьми, чтобы уложиться в дедлайн.
Собрать команду лучше заранее, если это не противоречит правилам джема. Искать можно через знакомых, ВКонтакте или на форуме сайта Анивижуал.
Создание игры: от идеи к релизу
Итак, когда команда в полном сборе, можно приступать к работе.
Шаг 1-й: написать синопсис (краткий пересказ сюжета). Это требуется для того, чтобы выяснить, какие спрайты, фоны и музыка требуется для игры. Затем либо составить техническое задание для художника и композитора, либо передать синопсис им, чтобы они сами смогли определить для себя объём работы.
Шаг 2-й: пока художник и композитор выполняют свою часть работы, вам требуется написать сценарий.
Шаг 3-й: перенести сценарий, спрайты и музыку в код игры.
Шаг 4-й: протестировать игру на наличие багов и опечаток. Желательно, чтобы это сделали все члены команды. Но друг за другом, а не параллельно. Ибо какой смысл, если вы будете находить одни и те же ошибки.
В рамках джема напишите максимально короткую историю, для которой потребуется мало ресурсов, в идеале всё может происходить в одной локации с двумя персонажами, иначе велик шанс не уложиться в дедлайн.
Сюжет
При создании своей игры я выступал в роли сценариста, поэтому большая часть моих советов будет касаться именно этого аспекта. Большинство из того, о чём здесь написано — не мои «открытия», а пересказ того, что я когда-то прочитал в книгах по кино- и литературному мастерству. Было бы некрасиво с моей стороны выдавать чужие мысли за свои, поэтому вот список литературы, на которую стоит обратить внимание сценаристу: Кристофер Воглер «Путешествие писателя», Роберт Макки «Диалог», Александра Молчанов «Главная тайна кино».
Создавая сценарий в рамках джема, отключите своего внутреннего редактора. У вас нет времени, чтобы переписывать предложение по пять раз, пока оно вам не понравится. Не теряйте время. Сперва напишите весь сценарий, а если останется время, то можете отредактировать его. Если вы и сценарист, и кодер в одном лице, то не спешите набирать сценарий сразу в редакторе кода. Используйте Word чтобы увидеть ваши очепятки, а затем перенесите текст в код.
Как сделать так, чтобы ваша история увлекла игрока? Ответ прост — каждую секунду ему должно быть интересно, что же будет дальше. Добиться этого можно с помощью вашего героя, но для этого он должен обладать набором определённых качеств. Самый верный способ заинтересовать человека, с которым вы только что познакомились – тайна. Это первое, что должно быть у героя. Одна хорошо придуманная и хорошо обставленная тайна способна держать игрока в напряжении до самого финала.
Второе, что непременно должно быть у него — недостаток. У каждого Ахилла есть своя ахиллесова пята. Неуязвимый герой без недостатков никогда не вызовет сочувствия зрителей, потому что зрители будут уверены в том, что герою ничего нельзя сделать. Недостаток героя вызывает симпатию зрителей в двух случаях — когда зритель знает, как преодолеть этот недостаток (чувак, ну как это ты боишься разговаривать с продавцами в магазине, ведь это так просто, попробуй!), и когда зритель не знает, как преодолеть этот недостаток (о ужас, Кримхильда вышила крест на одежде Зигфрида прямо напротив уязвимого места, его убьют и я не знаю, как этому помешать!). Никогда не делайте идеального героя – это клише, которое называется Мери Сью.
Третий ингредиент нашего героя — сокровище. Это то, что поднимает нашего героя над остальными персонажами. Умение быстро бегать у Форреста Гампа, умение быстро считать у Человека дождя, умение выпускать из ладоней липкую паутину у Человека-паука. Сокровище должно быть таким, чтобы зрителю захотелось его иметь.
И, наконец, последнее, чем должен обладать герой — цель. Еще до того, как вы начинаете придумывать историю, вы должны четко понимать, какова цель героя. История — это движение. Герой — тот, кто движется. Цель — это то, что заставляет героя двигаться. Нет цели — нет движения. Цель должна быть достаточно убедительной. Вряд ли зрители поверят, что герой отправится в кругосветное путешествие для того, чтобы выпить чашку кофе — такая цель может быть достигнута более простым способом. Иногда, казалось бы, ничтожная и легко достижимая цель начинает «дразнить» героя, оказывается недоступной, отодвигается. Возникают все новые и новые препятствия. Лучше всего, если игрок в первые минуты понимают, чего хочет герой.
Сцены и диалоги
В диалогах не должно быть «воды», иначе игрок заскучает, а в рамках джема это важно вдвойне, поскольку ваша история будет лаконичной и на «воду» нет времени. Также недопустимо пересказывать то, что герои и так знают. Часто начинающие авторы пытаются ввести читателя в курс дела с помощью диалога. И вот два эльфа заходят в таверну и пересказывают друг другу историю Срединного королевства. Конечно, порой для того, чтобы создать экспозицию и ввести игрока в курс дела, такой подход и можно использовать, но не злоупотребляйте им.
Чтобы написать мощную сцену или диалог, нужно соблюдать следующие правила:
В каждой сцене/диалоге должен быть конфликт.
В каждой сцене/диалоге персонаж делает шаг к цели (удачно или нет).
В каждой сцене/диалоге есть кульминация или развязка.
В каждой сцене/диалоге есть действие и реакция.
Структура истории
Для меня стало большим открытием, что в основе большинства сюжетов лежит единая мифологическая структура. Впервые о ней рассказал Джозеф Кэмпбелл в своей книге «Тысячеликий герой», а затем переложил в своей книге «Путешествие писателя» Кристофер Воглер. Модель этой структуры выглядит так:
Хочу обратить ваше внимание на то, что все эти правила – лишь форма, а не формула, которой нужно безоговорочно следовать. Вы можете что-то менять или не использовать, если вашей истории от этого будет только лучше.
А вот ещё один полезный совет от моего коллеги Hell-is-near, сценариста и автора новеллы «Она рисовала алых волков»:
Поскольку разработка ведётся в сжатые сроки, сюжет должен быть максимально локальным. Какую-то глобальную проблему в сюжете сложно разрешить в короткой истории, поэтому лучше создать конфликт на основе локальной ситуации, которая только случилась и разрешается быстро. Также стоит подумать о том, как ваш сюжет повлияет на работу художника и постараться сделать такую историю, где потребуется небольшое количество фонов или CG и по возможности использовать их несколько раз за весь сюжет.
Музыка
Здесь я передаю слово композитору Анжелике Гусевой из 4 Lions Studios.
Анжелика, что важно учесть композитору при работе над новеллой или тем, кто составляет ТЗ для него?
От себя могу добавить, что не стоит забывать про саунд-дизайн (пение птиц, звуки шагов, дождя, и т.д.) Правда, в рамках джема на это может не быть времени.
Графика
В нашем случае — по графике, а уже провожают игру по сюжету и впечатлениям, которые она в целом оставила у игрока. Если история не цепляет, то даже самая классная графика не спасёт проект. А вот если сюжет интересный, то графика зачастую отходит на второй план. Собственно сюжет – то, ради чего играют в визуальные новеллы. Тем не менее, уникальный графический стиль может привлечь игроков, поэтому вам нужно позаботиться о том, чтобы игроки захотели скачать и попробовать вашу игру, увидев лишь пару скриншотов.
По части графике мне особо нечего добавить, поэтому я предложил своим друзьям-художникам поделиться опытом участия в джемах и вот что они пишут.
Марк Тейлор (автор новеллы «Meet Your Dream», принимала участие в разработке новеллы «Своё место»): Я не уверена, как поступают другие, но в своей художественной работе в новелле я придерживалась следующего плана: мне нужен был чёткий список всего, что нам надо. Чтобы я могла заранее распределить, в какой день и сколько сил я потрачу. Если работу ведёт один художник — важно установить предел качества, чтобы не тратить лишнее время и силы туда, куда нет смысла тратить. Например, над фоном комнаты я могла бы корпеть и по 10 часов, выглаживая текстуры, делая их разнообразными и детализируя вещи. Но вместо этого я потратила 3 часа, нарисовав одну текстуру и просто отображая ее по горизонтали/вертикали и используя везде, где можно. Это очень экономит время! Допустим, ту же кладовку нарисовать труда не составило — копируешь кусок стены прежней локации, тянешь его под перспективу, отрезаешь где нужно. Тот же кусок используешь как дверь, подрисовываешь толщину, чтобы создать видимость досок. И кладовка готова! Главное понимать, что впереди ещё много работы, и зацикливаться над одной иллюстрацией не стоит.
Что касается спрайтов — нужно составить порядок действий, чтобы не теряться при начале работы с каждым новым персонажем. Конечно, у всех разный подход в работе со спрайтами. Я, например, рассудила, что вырисовывать и тени, и света, и рефлексы займёт слишком много времени, а покраска а ля основной цвет, тень и чуть света — будет быстрее. Но это довольно скучно, так что я добавила игру с толщиной лайна, чтобы обрамить скучные цвета. Напомню, что без референсов рисовать быстро очень трудно. Поэтому я бы посоветовала смотреть фотки одежды и прически, чтобы составить себе образ. Порядок у меня был такой: скетч, лайн, заливка осн. цветом, тень (к слову, цвета кожи, тени, света и волос я заранее вывела себе в палитру, чтобы их потом не искать), свет. И если есть детали, которые хочется подчеркнуть — то их тоже. Так спрайты получаются примерно под одну стилистику, что не триггерит у зрителя при взгляде, и занимают минимум времени. У CG порядок почти такой же, что и у спрайта. Лайн, заливка, тень и свет. А фон рисуем так же, как до этого фоны. Достаточная детализация, чтобы не было небрежно, но не слишком, чтобы не тратить лишнее время.
Лювнэж: (автор новелл «Соль и Мани» и «ДиРоХо»).
Лювнеж выразилась лаконично, но оттого её совет не менее ценен.
Во время участия в Микро-Рено 2019 я работала, тогда как большинство остальных участников отдыхали на каникулах. Наверное, из этого только пара банальных советов: делать максимально короткую историю и по возможности делегировать обязанности, чтобы не лежало 90% работы на 1 человеке, как в моём случае.
Ананке и Вакари (авторы новелл «Путеводный огонь маяка» и «Время умирать»).
Если говорить просто о создании новеллы, то, прежде всего, нужно понимать, что это за жанр такой, как он работает, с чем его едят, какой целевой аудитории он нравится, и чего от него ждёт эта самая аудитория. Нужно понимать, кто будет читать вашу новеллу. Кроме того, подходит ли ваша задумка именно для визуальной новеллы. Короче говоря, лучше всего ознакомиться с обычными японскими визуальными новеллами как можно тщательнее, чтоб потом не удивляться, почему ваше творение никто не читает/не понимает. Если человек создает новеллу один, он должен трезво оценивать свои силы. Даже короткую ВН сделать не так просто. Если говорим о команде – тут иные нюансы. Мы работаем вместе и уверены друг в друге, но таки столкнулись с ситуацией, когда потребовалась помощь извне. С композитором, у которого мы покупаем треки, у нас все сложилось хорошо.
Также можем посоветовать перед работой тщательно расписать синопсис (или даже накатать весь текст), чтобы заранее понимать, сколько потребуется ресурсов. Пока текст не готов, лучше заниматься скетчами и планировать дизайн, и только потом бросать силы на графон. Не дай бог в процессе написания текста всплывет какая-то важная деталь, из-за которой уже готовый арт (в любых количествах) полетит в помойку. Или же сценарист отвалился, а графон уже будет нарисован. Что еще? Фоны и спрайты должны сочетаться друг с другом. Как и спрайты с CG. Спрайты, нарисованные в разных стилях, портят впечатление. Остальное, наверное, уже специфические детали, их лучше обсуждать отдельно. Что же до создания новеллы в рамках джема, тут стоит сказать всего-то пару слов. Во-первых, повторимся, трезво оценивайте свои силы. Если раньше строчили только эпосы на тысячу страниц, не факт, что сумеете быстро переключиться на что-то короткое. Также важно работать с людьми, готовыми выложиться на полную, а не сбежать/вспомнить о более важных делах посреди пути. Во-вторых, что для нас стало на джеме самым важным – работать по графику. Заранее определить, когда и что должно быть сделано. Сделал раньше – молодец. Позже – очень плохо. Всегда нужно оставлять последние несколько часов на перепроверку всех багов (да, именно в последний момент что-то ломается: интернет, хостинги и так далее).
ЦГ или CG?
Я часто использовал аббревиатуру CG в статье. Это расшифровывается как Computer Graphic, поэтому по сути CG можно назвать любой диджитал арт, но в сфере ВН слово CG или ЦГ используется для обозначения особых артов. Их стоит использовать, чтобы акцентировать внимание на каком-то важном событии или сцене. Вот несколько примеров из игры «Соль и Мани».
Источник
Как создать свою новеллу на компьютер
Спустя долгие месяцы накопления материала и раздумий, нужен ли мне блог разработчика (если учитывать, что игра только близится к стадии демо-версии), решила, что все-таки нужен. Во-первых, чтобы больше людей увидело мой труд, и, во-вторых, потому что это хороший способ держать ход разработки «в тонусе» и не давать ей застоять. Начнем?
Небольшое вступление, чтобы рассказать о моем опыте. За три года, что я увлекаюсь разработкой новелл, из-под моего пера вышли:
1. Коротенькая фандомная новелла на полчаса;
2. Короткая демка на полчаса, которая так и не переросла в полноценный релиз (и слава богу, задумка была несерьезная и непродуманная, никакого выхлопа от нее я не получала ни в эмоциональном, ни в профессиональном плане);
3. Три эпизода фандомной новеллы, разработка которой продолжается до сих пор (и вполне бодро, после перерыва в год. Но это разговор уже для отдельной статьи, т.к. первый серьезный и находящий воплощения проект заслуживает внимания тт);
4. Участие в замечательной команде разработчиков ChocoBar, которая распалась в том году. Мы должны были выпустить еще несколько эпизодов новеллы «Девяти муз» с моим участием в качестве художника, но в итоге вместе со сценаристом основали свою отдельную команду и работаем как раз над пунктом номер три;
5. Незаконченный проект на последний хоррор-джем (когда-нибудь, я за тебя возьмусь).
На самом деле, я не большой фанат именно японских визуальных новелл. Я признаю классику, которая олицетворяет направление, мне нравится та же «Девушка в скорлупе», и я ничуть не умоляю того, что есть много достойных представителей на востоке, с которых и начался жанр. Но все же именно в плане визуальных новелл мне больше импонирует Европа/Россия (да, я особый вид извращенцев). Как бы много люди не говорили о том, что рувн никогда не смогут достичь тех же высот, что и японцы, это, в конечном итоге, неважно, потому что множество наших и зарубежных разработчиков к этому и не стремятся.
Я знакома с прекрасным творчеством Саламандры, команды Михирису и Хазукаши, и и полюбила я их как раз за то, что они работают в комфортной им манере, не оглядываясь на восточных коллег. И именно это стало для меня главным ориентиром. Не недостигаемое качество японских артов или извечных тем, а работа над тем, что тебе нравится, и как тебе это нравится. Все же для меня разработка новелл это, в первую очередь, выход творчества без ожидания какой-то материальной компенсации потраченного времени.
Моя история основана на теме, которую мне хотелось бы видеть в новеллах либо гораздо чаще, либо немного в другом виде, нежели она существует сейчас. Сюжет можно описать в двух словах: история о ведьминском ковене 20-го, а можно и чуть более прицельно: Королева Ковена мертва, и все ведьмы и ведьмаки собираются, чтобы принять участие в турнире за звание нового лидера. Вы — юная ведьма, самая слабая в своем окружении, заключили сделку с демоном в обмен на одно его простое желание: вы должны победить.
Не буду отрицать, главным источником вдохновения для меня послужили 3 и 8 сезон сериала «Американская история ужасов». Собственно, это и так понятно, потому что они оба рассказывают о современных ведьмах, но хочу отметить, что моя история создавалась не под впечатлением от сериала (со времени, как я его посмотрела, прошло уже несколько лет), он скорее служил стилистическим ориентиром, потому что персонажи и качество сюжета там, на мой вкус, отменные.
• Несколько концовок, тут все понятно.
• Система магии. Я хочу дать возможность развить Миранду так, как понравится игроку, чтобы он шел тем путем, какой ему ближе всего:
Развивая Дар Тьмы, вы поведете Миранду по пути истинной ведьмы, как она всегда и хотела.
Развивая Дар Крови, вы дадите Миранде шанс стать не просто ведьмой, но кем-то гораздо более опасным (как для окружающих, так и для вас).
• Кроме этого, в новелле будет система «ужесточения» (привет всем, кто играл в DAO):
Совершая определенные поступки, вы будете ужесточать Миранду, она будет становиться менее эмпатична и станет принимать более жесткие решения в те моменты, когда у игрока не будет права выбора.
В визуальной новелле, конечно, можно было бы обойтись и без всего этого, но мне такая система по душе. Хотелось бы создать игру с вариативным прохождением и по-разному раскрыть персонажей.
• Романтические руты:
Скорее да, чем нет, соберем демку и посмотрим, что скажут игроки. Но я имею их ввиду.
Сам Дом, как я уже говорила, задумывался именно неброским лаконичным зданием, которое можно посреди пустыря и не подумать о нем чего-то сверхъестественного. Хотя изначально моей идеей было как раз-таки более помпезное обиталище для Ковена, в конечном итоге я остановилась на простом варианте. Необычным и вычурным его и так сделают люди, что там живут, да и внешнее убранство изменится (у нас ведь турнир, как никак, понаставим шатров, палаток, разобьем небольшую рощицу со статуями неподалеку).
Мне безумно нравится ведьминская эстетика. Я нашла очень много классных картинок и фотографий, которые вдохновляют меня на работу: среди них как альбомы музыкальных групп, так и какие-то коллажи с официальных праздников, словом, все, что дает мне мотивацию развивать эту идею дальше. Атмосферу в новелле я планирую приблизить к загадочно-холодной, туманной, надеюсь, это получится.
Одежде в новелле я хочу уделить отдельное внимание: сколько же у меня собрано референсов! На начальных концептах, которые я уже выкладывала и в паблике, и на форуме, костюмы без особой детализации, общие формы/цветовые схемы, но я, конечно, думаю взяться за них основательно. Говоря о моде персонажей, мне не хочется делать их жителями только одной эпохи, современной. Новеллу я рассматриваю, в том числе, и как арт-объект, а значит можно не ограничивать свою фантазию принятыми рамками.
Говоря о героях новеллы, в них можно найти сходство со многими другими героями, которых я безумно люблю. Один из персонажей, например, напрямую вдохновлен образом Фредди Меркьюри из клипа «Killer Queen». Я очень люблю творчество группы и других ассоциаций с этой песней у меня попросту не возникает: я вижу его эдаким взбалмошным, резким, знающим себе цену соблазнителем, но при этом безумно одиноким, хотя страдать из-за этого ему непременно нравится.
При этом, хочу подчеркнуть, что я не занимаюсь бездумным копированием. В работе для меня важно найти идейного вдохновителя: персонажа или нескольких, это могут быть как реальные люди, так и просто рандомные картинки из интернета, которые помогут мне составить тот образ, который мне нужен. Вытащить мысли и рассортировать их по полочкам, чтобы в дальнейшем наращивать на них все новые и новые слои.
Что можно сказать о героях новеллы и о Миранде, как о персонаже (вторая на скрине)? Она не обладает поразительными способностями, но ее нельзя назвать заурядной или обычной. Мне бы не хотелось делать делать историю о #нетакойкаквсе девушке, которая находит в себе силы, и бла бла, я не люблю слабых персонажей, которым нужен парень или какое-то мистическое чудо, чтобы раскрыться.
Несмотря на то, что среди в Ковене ее считают чуть ли не слабейшей ведьмой, она делает все, чтобы таковой не быть. Это один из тех персонажей, которые устали не получать желаемого результата, прикладывая все силы к этому, поэтому она берет дело в свои руки и решается на сделку с демоном. И вот теперь, когда она ничуть не хуже остальных, посмотрим, чем обернется для нее (и для вас) такая сила. Никакой навязанной морали, мол, Миранда поступает нечестно, абсолютно точно нет. Есть только результат и разные способы его достижения, который вы выберет сами. А потом, в зависимости от концовки, сами решите, стоило ли оно того.
Это же касается и других персонажей: есть властолюбивый Александр (третий на скрине), есть старший брат Миранды, который вечно затмевает вас (четвертый), есть еще много кого, и ваши отношения с ними будут зависеть, в действительности, только от вас. Не обязательно подставлять вторую щеку, можно быть жестче, можно быть мягче. Я бы хотела создать по-настоящему живую химию между игроком и героями новеллы, но при этом не сводя все к пустым диалогам. Буду безумно рада, если воплощу это именно так, как и задумывала тт
И, напоследок: спасибо всем, кто прочитал статью, надеюсь, она была достаточно информативной, чтобы дать вам понять, каким проектом я занимаюсь. В качестве дополнения приложу недавний гуи главного меню вместе с музыкой, который я набросала на днях
Ссылка на паблик, если кому-то захочется следить за ходом разработки дальше.
Источник
- Главная
- Статьи
Игровые движки для новелл
Время на чтение:
3-5 минут
RenPy
Простой движок написанный на Python, без ограничений, с большим комьюнити и постоянным развитием.
Из плюсов:
-
нет ограничений на создание коммерческих проектов;
-
есть возможность портировать под разные платформы;
-
простой синтаксис. Если опыта в программировании нет или мало, то, при
желании,
можно за один день разобраться с большей его частью. К тожу же огромная википедия и живые форумы
с решениями помогут в освоении движка; -
есть возможность “бесконечно” развивать функционал, с помощью PyGame, но тут
уже
нужно уметь программировать и знания библиотеки PyGame; -
малые требования к оперативной памяти в простых ВН;
-
стабильный, если всё было написано без ошибок, то вылетов не будет.
Из минусов:
-
для чего-то серьезного нужно понимание как программировать и как это делать
красиво, качественно и эффективно; -
есть возможность портировать под разные платформы;
-
простой синтаксис. Если опыта в программировании нет или мало, то, при
желании,
можно за один день разобраться с большей его частью. К тожу же огромная википедия и живые форумы
с решениями помогут вам в освоении движка; -
есть возможность “бесконечно” развивать функционал, с помощью PyGame, но тут
уже
нужно уметь программировать и знания библиотеки PyGame; -
кто-то ругает интерфейс, говоря, что он менее дружелюбный. Однако, код можно
писать хоть в блокноте, что можно отнести к плюсам малых требований; -
не поддерживает анимацию. Можно костылить через загрузку сотен картинок, но
программировать это будет трудно, к тому же вы убьёте производительность.
Tyrano Builder
Второй по популярности движок, который был сделан на базе известного скриптого языка kirikiri.
Красивый фантик, но с багами внутри.
Из плюсов:
-
приятный интерфейс и простое создание игровых скриптов (но может сильно
забаговать); -
возможность сборки игры под большое количество платформ;
-
возможность собирать сцены простым drag & drop;
-
достаточно широкие возможности работы с медиа из коробки;
-
невысокая цена;
-
поддержка моднявых SDK, типа live2d.
Из минусов:
-
множество багов, которые часто встречаются в вышеупомянутых плюсах;
-
финальный билд может иметь, с высокой долей вероятности, проблемы с
масштабированием, с сохранением прогресса, перемоткой диалогов и так далее; -
отсутствие адекватной технической поддержки со стороны разработчиков
(моральной,
судя по всему, тоже).
Unity 3D
Речь пойдет не столько о движке, сколько о списке ассетов которые можно добавить внутрь него и
использовать для создания новелл.
-
Fungus. По сути — диалоговый ассет.
-
Visual Novel Engine — из “коробки” подойдет только для простых новелл.
-
Vinoma — Чем-то похож на Tyrano.
-
Utage.
И подобных ассетов множество.
Большой плюс:
-
Можно допиливать, улучшать и расширять функционал любого из них средствами
Unity.
Большой минус:
-
Чтобы раскрыть потенциал всего движка и ассетов полностью — нужно выучить
Unity и языки программирования к нему.
Novelty
Бесплатный свободный конструктор для игр и визуальный новелл. Хорошо подойдёт для новичков, так как
не требует знаний скриптинга или языков программирования.
Из плюсов:
-
простой для освоения;
-
создание игр через систему Drag&Drop;
-
бесплатное пользование;
-
при желании можно писать скрипты на языке похожим на C++ и Java.
Из минусов:
-
Сыроват, могут возникать проблемы при создании или сборке билда.
Дата публикации: Дек. 3, 2022
# редакторы
# RenPy
# Python
# Разработка
# Полезности
Для комментирования войдите на сайт или
зарегистрируйтесь
Почти все книги и уроки по Java для новичков начинаются с описания ООП: какой он замечательный с великолепный. Понятно, поскольку в Яве просто невозможно любое другое программирование, кроме как объектно-ориентированное, то вначале предлагается освоить 40..80 страниц безумных аналогий с иерахией кошечек/собачек/уточек/автомашин, и только после этого предлагается написать «Hello, World!».
При этом стоит заметить, что абсолютно всё обучение Java строится на примитивнейшем выводе результата на консоль. То есть не консольное приложение в привычном понимание, а именно вывод каких-то данных построчно. Ну вот например Turbo Pascal 3.0 вышел в 1985 году и в нём уже была поддержка графических режимов. В 1990 году появился Turbo Vision — очень крутая вещь — аля-Windows только для DOS. А в Яве в 2018 году возможен только вывод на консоль. И вот вся эта восторженность и крутость как-то вдребезги разбивается уже на этапе «Hello, World!»… Хуже наверное это только развлекаться на программируемом калькуляторе МК-61 или МК-52 — а что? там такой же построчный вывод.
Но, самое забавное — это то, что на Java реально можно создавать программы используя визуальное программирование! Я об этом узнал только когда прочитал (или скорее ознакомился) с 500 страничной книгой, где в одной из последних глав, вдруг выяснилось, что для Java существуют нормальные GUI (графические интерфейсы пользователя) и можно оформлять программы с кнопочками, полями ввода и нормальными меню. Спрашивается: зачем вы столько времени «мурыжили» эту паршивую консоль, когда можно было сразу всё делать красиво и аккуратно?
(Дальше много картинок!)
Потратив несколько дней на изучение данного вопроса, я выяснил несколько забавных нюансов.
Первый — GUI для Java есть трёх видов (библиотек): AWT, Swing (кто придумывает такие названия?) и JavaFX.
На сегодняшний день (Java 8 и 9) все они входят в комплект поставки JDK: то есть всё работает из коробки и не нужно заморачиватся с их установкой. Это большой плюс.
Но, AWT — это первая и очень старая реализация, поэтому её использовать не нужно. В общем — некошерно. Swing — тоже некошерно, поскольку там что-то не так замутили и программы из-за него жутко тормозят. Точнее не скажу, не разбирался, но вроде как она официально больше не развивается несколько версий. А вот JavaFX — это гуд и наше светлое будущее.
Есть ещё такая мерзость — java-апплеты, те которые работают в браузере и при этом его намертво «вешают», примерно как Flash, только ещё хуже. К счастью эту/эти штуку/штуки практически уже не используют, поэтому тратить время на их изучение бессмысленно.
Так что единственное на что стоит потратить время — это JavaFX.
Второй момент. Всё не так просто. Рассмотрим Delphi (или Visual Studio, Lazarus, не важно). Даже для «зеленого» новичка создание простой программы (одна кнопка и текстовое поле для вывода) будет происходить так:
- запускаем Delphi;
- автоматом создается новый проект с главной формой;
- выбираем на палитре компонентов кнопку и размещаем на форме; всё визуально
- аналогично кидаем на форму текстовое поле;
- при необходимости в панели свойств можно указать текст кнопки, размеры и т.п.;
- запускаем — Delphi предложит сохраниться, сохраняемся.
То есть мы не написали ни единой строчки кода, IDE — всё сделала сама. Если посмотреть на сгенерированный код, то назвать его простым нельзя — здесь уже требуются определенные знания, но Delphi достаточно умна, чтобы понимать как с ним работать.
Если мы захотим добавить какое-то действие, например при нажатии на кнопку, заполнять текстовое поле фразой «Привет!», то делаем так:
- два раза кликаем на кнопку (или выбираем событие onClick);
- Delphi создает код обработчика этого события и перекидывает нас в редактор;
- набираем название текстового поля и Delphi выдает подсказки, по которым можно соориентироваться что и как делать.
То есть опять же, IDE выполнила всю черновую работу.
Но это в других языках, Java идёт своим путём. Чтобы создать кнопку в JavaFX нужно вручную создать Stage — «театральные подмостки» (название на полном серьёзе!) и на них разместить сцену (Scene). К ней какой-нибудь контейнер в который уже вкладывается прочие элементы.
При этом предполагается, что каждый элемент и каждое его свойство нужно программировать индивидуально. Вот пример на две кнопки и одну label из моей обучающей книги
... response = new Label("Push a Button"); Button btnUp = new Button("Up"); Button btnDown = new Button("Down"); btnUp.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent ae) { response.setText("You pressed Up."); } }); btnDown.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent ae) { response.setText("You pressed Down."); } }); rootNode.getChildren().addAll(btnUp, btnDown, response); ...
Когда кнопок наберется с десяток, плюс 20 пунктов меню, плюс 30 других компонентов, то код маленьким не покажется. И это ещё без кода, который отвечает за дополнительные свойства, например выравнивание, размеры, шрифт… И вот это второе указывает на то, что обучалки по JavaFX как раз и показывают как писать «fx-код» ручками. Тоска, одним словом…
Но, тут возникает спасительный третий нюанс. Оказывается умные люди (видимо знакомые с полноценными IDE), разработали другой вид приложений, где для генерации «fx-кода» используется описательный xml-файл, который называется fxml, а такие программы менуются как «Приложения FXML JavaFX»
Для меня совершенно удивительно то, что обучение Java не начинается именно с таких приложений. Пусть это не Delphi, но всё-равно это в миллион миллионов раз лучше, чем работать с консолью и забивать себе голову прочим хламом о том, почему нужно использовать стопицот строк с ООП там, где в других языках на это уходит одна простенькая процедура.
Теперь серьёзно. Если вы никогда не программировали на Java, то можете попробовать сделать это прямо сейчас. На самом деле — это довольно круто, хотя потребуется немного потратить время, чтобы освоится с программами. Если у вас есть опыт работы с «визуальными IDE», то ещё лучше — встретите много знакомого.
JDK
Ява должна быть установлена на компе. Я не буду приводить ссылки как это сделать — гугл в помощь, поскольку всё слишком просто.
IDE
В Яве нет какой-то одной программы — среды разработки, поэтому в Сети встречаются примеры из разных программ. Самые примитивные, вроде Notepad++ годятся только для консольного вывода, но если рассматривать что-то более серьёзное, то выделяются только три кандидата: NetBeans, Eclipse и IntelliJ IDEA.
NetBeans — самая простая программа, которая быстро (относительно остальных) запускается и довольно сносно работает.
Eclipse — тоже неплохой вариант, более мощный чем NetBeans, но слабее чем IntelliJ IDEA.
IntelliJ IDEA — выглядит самой крутой, но за это приходится платить скоростью работы. Стоит отметить, что Android Studio базируется на IntelliJ IDEA, но студия работает почему-то значительно медленней.
Важный момент связан с программированием под Андроид. Из этих трех IDE только IntelliJ IDEA для этого более-менее годится. В Сети масса материалов о программировании под Андроид в Eclipse, но они все уже устаревшие — не тратье время, запуская старенький ADT-плагин и пытаясь хоть что-то с ним сделать. Может быть старый Android SDK и будет работать, но все новые — уже нет.
Я покажу как сделать приложение FXML JavaFX во всех трёх программах, но прежде чем приступать, нужно установить ещё одну программу: SceneBuilder (используйте версию для Java 8). Это ключевая программа, где, собственно и выполняется всё визуальное построение. SceneBuilder самостоятельно может работать без IDE, поэтому можете её запустить и посмотреть как она устроена. На выходе будет fxml-файл, который содержит всю нужную разметку. Этот файл и используется в IDE, вместо написания мегатонны кода.
ТЗ
Создаваемая программа будет очень простой — кнопка и текстовое поле. При нажатии на кнопку в текстовое поле пусть добавляется текст «Привет!».
В каждой программе вам нужно заранее прописать настройку — используемую JDK. Если не можете понять как это сделать, гуглите.
NetBeans
Перед началом работы, нужно подключить SceneBuilder: Сервис — Параметры — Java — JavaFX — Начальная страница Scene Builder. Выберите каталог программы. Настройку достаточно сделать один раз. Это относится ко всем IDE.
Создаём новый проект, где нужно выбрать «Приложение FXML JavaFX».
Жмём «Далее» и видим окно настройки проекта. Нужно указать название проекта, у меня это myfx.
Жмём «Готово» и, после некоторой работы NetBeans, видим готовые файлы:
- Myfx.java — это main-файл, который, собственно и запускает всю программу.
- FXMLDocumentController.java — это «контролёр», где и будет в основном программирование.
- FXMLDocument.fxml — этот файл хранит визуальную часть.
Теперь запустите программу. Вначале пойдет сборка и компиляция (довольно быстрая), после чего выскочит окно нашей программы.
Это круто, потому что мы не написали ни строчки кода, но уже получили программу с работающей кнопкой.
Если вы правильно указали путь к SceneBuilder, то можете выбрать пункт меню «Открыть» на файле FXMLDocument.fxml. Это же самое произойдёт если сделать двойной клик. Откроется SceneBuilder. Если пункта нет, то путь указан не верно, проверьте настройку.
Принцип работы в SceneBuilder един для всех IDE, поэтому пока я опишу только общие моменты, дальше вы уже сами сообразите.
Стоит отметить, что после редактирования файла, закрывать SceneBuilder не нужно. Достаточно только сохраниться (Ctrl+S) и переключиться на IDE — она сама подхватит изменения.
Окно SceneBuilder разделено на три части:
- слева — наборы компонентов, иерархия и Controller, где указывается основной класс (это важно!)
- в центре — сама форма, где и происходит визуальное построение.
- справа — свойства компонентов, разделенные на три закладки (это условное деление). Вкладка Code отвечает за то, что будет использоваться в java-файле.
Построение FX-программ должно начинаться с контейнера. В данном примере NetBeans использовал AnchorPane. Он довольно удобный, позволяя настраивать для вложенных элементов «правильные» отступы. Вкладка Containers содержит другие контейнеры, с которыми вы сможете самостятельно потренироваться (я и сам ещё и половины не освоил ).
Иерархия компонентов очень удобная штука, позволяющая быстро выбрать нужный элемент.
По условиям ТЗ у нас должно быть текстовое поле. NetBeans использует Label, но мы не будем ничего удалять, а просто добавим новый элемент TextField на форму (произвольно на ваш вкус).
В SceneBuilder возможен предварительный просмотр (Ctrl+P). В этом режиме отображается только форма и все элементы «без java-программирования».
Теперь важный момент: для того чтобы можно было использовать компонент в java-программе (в нашем коде), следует выполнить две вещи.
Первая — проверить, что указан верный контролёр. В нашем случае NetBeans сам уже всё сделал и указал myfx.FXMLDocumentController
.
Как видно — это контролёр из файла FXMLDocumentController.java (пакет.контролёр). Не всегда IDE его указывают, но это важно, поскольку fxml-файл (точнее java-код) использует его для привязки.
Второй момент — используемый компонент должен иметь свой ID — это параметр fx:id
. Здесь я указал textField1.
Вверху появится желтый треугольник сообщения, что якобы нет связки этого id с контролёром. Пока не обращайте на него внимания, об этом пойдет речь дальше.
У кнопки, которая будет заполнять текстовое поле, тоже должен быть свой id, а также метод события onAction (это основное событие компонента, а не onClick, как в Delphi). NetBeans уже об этом позаботился, поэтому нам ничего не придется писать.
На этом визуальное построение можно завершить. Сохраняемся и переключаемся в NetBeans. Видим, что файл FXMLDocument.fxml изменился: добавился textField1:
Теперь нам нужно как-то использовать текстовое поле в java-коде. В отличие от Delphi, NetBeans не создаёт для этого никакого кода, потому нам придётся добавлять его в «полу-ручном» режиме. Для этого в разных IDE используются различные способы, но общий принцип в том, что нужно установить курсор на нужное поле в редакторе и выполнить некое «действие». В NetBeans оно называется Установить контролер в меню Источник. (Да в Яве большие проблемы с именованиями…)
После выполнения этой команды, произойдет переход к файлу FXMLDocumentController.java, где в код будет добавлено объявление переменной textField1:
Обратите внимание на «@FXML» — эта аннотация указывает, что код как-то используется в FXML. После этих изменений SceneBuilder уже не будет выдавать предупреждение, как желтый треугольник ранее. Если ещё раз запустить SceneBuilder, то это можно проверить.
Запускаем программу на выполнение для теста. Теперь наша задача по клику на кнопке заполнить текстовое поле. Как вы уже поняли метод handleButtonAction как раз и выполняет нужную работу. В нём дописываем:
textField1.setText("Привет!");
Обратите внимание как работает автодополнение кода после того, как будет нажата точка.
По мере набора текста, NetBeans будет сужать область предложений, где можно выбрать нужный вариант. Эта возможность очень здорово облегчает жизнь программистам, поскольку вариантов слишком много и это позволяет избежать различного рода синтаксических ошибок при наборе.
Данная возможность присутствует по всех IDE, хотя есть различия в реализации и использовании.
Запускаем программу и видим, что всё работает как нужно.
Нам пришлось написать всего одну строчку кода, ну и выполнить несколько дополнительных действий в редакторе.
Eclipse
Запуск Eclipse происходит несколько дольше, чем NetBeans. Вначале нужно указать путь к SceneBuilder. Делается это в Window — Preferences — JavaFX.
Обратите также внимание на то, что Eclipse неруссифицированная программа (даже не знаю, есть ли к ней руссификатор).
Создаём новый проект и выбираем JavaFX.
Жмем Next и попадаем на страницу настроек. Здесь я указал название проекта, как и прежде myfx (у меня для разных IDE разные каталоги проектов, поэтому они не пересекаются друг с другом).
Дальше ещё несколько раз жмем на Next, пока не попадем на последние настройки.
Здесь нужно выбрать тип приложения, тип контейнера и имя контролера. Жмем Finish и Eclipse быстро генерирует каркас нашей будущей программы.
Здесь всё очень похоже, только добавлен еще один файл application.css — да, да, в JavaFX можно использовать CSS для настройки оформления! Eclipse сразу сгенерировал для этого файла код подключения.
Запустим программу и убедимся, что нет ошибок.
В отличие от NetBeans, здесь совершенно пустая форма. Откроем её в SceneBuilder с помощью контекстного меню.
И здесь мы видим, что формы нет. Но, на самом деле она есть — просто по умолчанию используется вычисляемый размер (высота и ширина), который в данном случае равен нулю. Компонентов-то нет! В нашем случае это не совсем то, что нужно, поэтому мы выберем BorderPane в иерархическом списке и в свойствах Pref Width и Pref Height укажем какие-то значения. Эти свойства задают «желаемые» ширину и высоту. После этого форма сразу же «проявляется».
Контейнер BorderPane состоит из 4-х частей: top, right, bottom, left и center. Компоненты следует помещать в разные части — от этого будет зависеть их положение при изменении размера окна.
Здесь довольно сложно объяснить словами, просто попробуйте разместить несколько кнопок, а после в предварительном просмотре измените размеры окна.
Я не стал особо мудрить и разместил вверху текстовое поле, а в центре кнопку.
Теперь проверим, что указан контролёр: в данном случае application.SampleController — Eclipse выполнил эту работу за нас.
Теперь нужно указать id у наших элементов. Для кнопки я задал btn1, а текстовому полю textField1. У нас опять же возникло сообщение «желтый треугольник».
Для кнопки укажем метод на событие — btn1Click.
Сохранимся и вернёмся в Eclipse. Мы увидим, что файл Sample.fxml обновился, но рядом с некоторыми строками появились значки предупреждения.
Ситуация здесь точно такая же как и в NetBeans — нужно в «полу-ручном» режиме вносить правки. В Eclipse для этого используется контекстное меню по второй кнопке мыши: Quick Fix или горячая клавиша Ctrl+1 (что удобней).
При этом выскакивает подсказка о предполагаемом действии. Например для textField1 предлагается добавить идентификатор в контролёр:
а для кнопки ещё и метод-обработчик события:
При этом, Eclipse немного притормаживает и изменения не сразу отображаются на экране. Тут нужно либо переключиться на файл контролёра, либо немного подождать. В результате в код будет добавлены нужные изменения и значки предупреждений исчезнут.
Добавим наш код как и раньше мы сделали в NetBeans.
Обратите внимание на более интелектуальную работу автодополнения. В автоматическом режиме он немного подтормаживает, но если нажать Ctrl+Пробел (эта же комбинация используется во многих IDE), то позволяет получить и неплохой хелп.
Запускаем нашу программу.
И записываем себе на счёт ещё одну IDE.
IntelliJ IDEA
IntelliJ IDEA запускается довольно неспешно, можно успеть проверить почту.
Опять же указываем путь к SceneBuilder: File — Settings:
Дальше создаем новый проект:
И указываем его имя (как обычно — myfx):
IntelliJ IDEA выполнит инициализацию и мы увидим уже знакомые три файла. Запустим программу, чтобы проверить отсутствие ошибок.
Здесь также пустая форма, но зато указан заголовок программы. Если посмотреть на код Main.java, то увидим строчку:
primaryStage.setTitle("Hello World");
Это и есть заголовок приложения. В других IDE эта строчка отсутствует, но зато теперь мы знаем для чего нужны «театральные подмостки».
Переключаемся в SceneBuilder (аналогично Eclipse): второй кнопкой мыши нужно выбрать Open in SceneBuilder.
Здесь также пустая форма, но с контейнером GridPane. Устанавливаем Pref Width и Pref Height, чтобы отобразилась форма.
Сам по себе GridPane представляет собой аля-сетку из ячеек для элементов. Думаю, что тут нет смысла повторяться — все действия будут аналогичными:
- разместить кнопку и тестовое поле,
- присвоить им id,
- для кнопки прописать метод для обработки клика,
- не забываем проверить, указан ли контролёр (sample.Controller).
Закрываем SceneBuilder и возвращаемся в IntelliJ IDEA. Здесь нужно добавить идентификаторы id в код, а также создать метод для реакции на нажатие кнопки.
IntelliJ IDEA предлагает для этого два способа. Первый — при наведении мышки на «проблемное место» будет появляться подсказка, на которую можно кликнуть:
Второй — горячая клавиша Alt+Enter
При каждом добавлении происходит переключение на файл контролёра, где можно сразу увидеть изменения.
При этом, заметьте, не добавляется строчка «@FXML». Если мы вручную его добавим перед переменными и методом, то IntelliJ IDEA сразу предложит добавить нужный java-класс:
Вообще IntelliJ IDEA показывает достаточно хорошую сообразительность и выступает помощником в написании кода. Причём делает это самостоятельно без лишних нажатий кнопок.
Ну что ж, добавляем свой код для обработчика и запускаем программу:
Прекрасно, всё работает!
Итого
Главный вывод — на Яве возможно визуальное программирование. Может оно и не идеальное, но вполне годное, особенно для новичков. Изучать язык гораздо интереснее, когда есть какой-то осязаемый результат — ООП, классы и прочие премудрости — это хорошо, но лучше начать с кнопочек, полей ввода, меню и всего того, что подразумевает нормальная программа. А консоль — это скучно и неинтересно.
Три IDE я привел не случайно. В Сети очень много примеров для Явы и все они для разных программ. Лично я ещё не определился со своим предпочтением, поскольку у всех есть как плюсы, так и минусы. Наверное нужно поработать со всеми, тогда и будет понятно.
Но, ключевой момент — это умение работать с SceneBuilder. Построение формы в JavaFX немного отличается от той же Delphi, в первую очередь в использовании сложных контейнеров (они могут быть вложенными друг в друга). Поэтому вначале следует разобраться с ними, после уже можно браться за сами компоненты.
Рассмотренные программы очень простые, для изучения наверное стоит написать что-то более интересное, например калькулятор. То есть те проекты, которые не требуют особых знаний и рассчитанные на быстрый результат. Впрочем, это уже на любителя.