Java games basics
In this part of the Java 2D games tutorial, we will write about some basics needed to create games. We create a basic application, paint a donut, and display a picture.
Advertisements About
This is Java 2D games tutorial. It is aimed at beginners. This tutorial will teach you the basics of programming 2D games in Java programming language and Swing GUI toolkit. Images used in this tutorial can be downloaded here.
Application
We will show the skeleton of each of the games in this tutorial.
The Board is a panel where the game takes place.
This is the entry point of the game. Here we have the main method.
Here we put the Board to the center of the JFrame container.
This line sets the size of the window.
This will close the application when we click on the close button. It is not the default behaviour.
Passing null to the setLocationRelativeTo() method centers the window on the screen.
We create an instance of our code example and make it visible on the screen.
Advertisements Donut
The objects on the board are either images or are drawn with the painting tools provided by the Java 2D API. In the next example, we draw a donut shape.
The painting is done inside the paintComponent() method.
It is a good programming practice to delegate the actual painting to a specific method.
The Graphics2D class extends the Graphics class. It provides more sophisticated control over geometry, coordinate transformations, colour management, and text layout.
The rendering hints are used to make the drawing smooth.
We get the height and the width of the window. We need them to center the donut shape on the window.
Here we create the ellipse.
Here the ellipse is rotated 72 times to create a donut shape.
This is the main class.
Drawing an image
When we create computer games we often work with images. In the next example we load an image and paint it on the board. If you cannot locate the image file, have a look at the Displaying image in Java tutorial.
We pain an image of a town on the board. The image is drawn inside the paintComponent() method.
We create an ImageIcon .
We get an Image out of the ImageIcon .
We draw the image on the window.
We determine the width and height of the image. The preferred size of the board panel is set to the dimensions of the image. In cooperation with the JFrame’s pack() method, the window is just big enough to show the image.
Пишем 2d-игру на Java
В этой статье будет описываться создание 2D игры на Java. Сразу предупреждаю, вы должны хотя бы базово знать язык Java, поскольку на подробное объяснение каждой строки у меня нету времени. И очень прошу вас, не списывать просто код, а пытаться понять что означает каждая строка, и писать со смыслом. И еще, я использую Eclipse, но вы можете использовать любой IDE.
Задача:
Я планирую создать игру, напоминающую шутер с видом от 3 лица.
Начало:
Ну что, приступим!
Для начала создадим проект. Назовем его «Just game». И сразу создаем класс Display.java. В него пишем:
Теперь разберемся, что мы сделали.
мы создаем рамку, которая и будет отображаться при запуске нашей игры
устанавливаем операцию, которая будет происходить при нажатии на крестик. EXIT_ON_CLOSE — выйти из программы
устанавливаем нашей рамке максимальные размеры, убираем декорации(кнопки свернуть, закрыть, уменьшить/увеличить и т.п.), т.е. делаем игру на весь экран. Если вы хотите, чтобы игра не была бы на весь экран, то используйте:
— делаем рамку видимой
Только не забудьте, все настройки рамки надо писать до того, как вы сделаете её видимой
Ну чтож, теперь нажимаем «Run» и пробуем запустить нашу игру. Если все написано правильно, у вас не должны возникать ошибки и должно появиться пустое, серое окно.
Серое окно… Как скучно… Давайте создадим что-нибудь поинтереснее.
Создадим новый класс, под названием «Main». Main класс у нас будет являться панелью, которую мы вставим в рамку, по этому он должен расширять JPanel. (Для тех, кто не знает, расширять пишется как extends после названия класса)
Возвращаемся в класс Display и после настроек рамки, но перед установлением её видимости, пишем:
Вы спросите — «Ну и зачем мы это сделали?». Представьте себе картину. Эта картина и является конечная наша игра. А теперь представьте рамку. Без ничего внутри, просто пустую рамку. На ней ничего нельзя нарисовать, она бесполезна. Для этого, мы вставили в картину пустой лист, на котором программа в дальнейшем может рисовать картину. На этом закончим наше лирическое отступление и вернемся к классу Main.
Нам нужно осуществить отрисовку, по этому мы должны добавить метод paint. Для этого пишем:
Ну и для начала, можем написать внутри этого метода отрисовку линии. Для этого пишем:
Теперь запускаем программу, и видим:

Даааааа, не густо…
Давайте отрисуем какую-нибудь картинку. Например эту:

Для начала, нам нужно указать путь к картинке. Для этого не в методе paint, пишем:
(предварительно надо в наш проект скинуть картинку и назвать ее 2.png)
После этого удаляем строчку отрисовки линии, а вместо нее в метод paint пишем:
Разберемся поближе с методом drawImage, так как мы будем часто его затрагивать.
drawImage(картинка которую мы будем рисовать, которую мы объявили раннее, координата X с которой будет рисоваться картинка, координата Y с которой будет рисоваться картинка, paint);
Отдельно хочу поговорить о параметре paint. Лучше всего оставляйте его null. Я только однажды сталкивался, когда мне нужно было использовать paint. Это было когда я отрисовывал текст, и задавал ему размер шрифта. Но советую не лезть туда и использовать null.
Теперь запускаем программу, и видим:

Чего-то она маленькая, не правда ли? Давайте научимся увеличивать её размеры. Добавляем к drawImage() параметры так, чтобы вышло:
Что мы сейчас добавили? Эти два параметра растягивают картинку, до координат 1920 и 1080. Получается, что картинка на весь экран. Давайте запустим программу и это проверим.

Ну наконец-то. Теперь мы умеем любые картинки растягивать на весь экран. Но вот проблема. Метод paint вызывается только один раз. И как же его обновлять постоянно? Для этого существует очень полезная вещь — таймер. Давайте создадим его.
Для этого пишем:
(20 это частота с которой обновляется таймер, this- где выполнять метод при обновлении таймера
Это мы должны вписать сразу после строки определения класса, т.е. после:
Также, надо дополнить строку определения класса таким образом:
После прописывания этой строки, у вас название класса должно подчеркнуться красным. Чтобы это исправить, в самом конце класса добавьте метод:
Этот метод будет выполняться при обновлении таймера. В него мы должны написать repaint(); чтобы при каждом обновлении таймера у нас все элементы бы стирались, и нарисовывались заново.
Дальше, мы должны запустить таймер. Для этого, создаем конструктор класса Main и в него пишем:
После этого, можете не запускать программу, ведь в ней ничего не изменится. Давайте заменим текстуру домика на нормальную текстуру карты. Её вы можете нарисовать сами, либо скопировать у меня пробную:

Размер картинки может быть любой, все равно её размер будет подгоняться прямо в программе. Ах да, разрешения компьютеров могут быть разные, так что добавим-ка в конструктор такие вещи:
И перед конструктором добавим:
И сходим еще в класс Display.java и там немного изменяем метод frame.add:
Таким образом, наша рамка будет передаваться в класс Main.java. Переходим в этот класс, и там где у нас метод paint() меняем строку drawImage() на:
Таким образом, теперь наша игра будет отрисовывать картинку на весь экран, в независимости от его разрешения. Запускаем:
Java Projects
This project will get you making your first game in Java! Take my starter code (I explain how it works) and build your own game! Whether your a beginner or intermediate programmer, I layout some ideas for you on what to build next to progress your skills. This is a great project for all Java students, and might even look good on that portfolio for your resume. Have fun developing your first video game!
Links
What’s up guys? Today I wanna show you how to make a video game in Java. If you’re in that beginner-to-intermediate range of learning how to program, and you’re looking for a project that isn’t super boring, you’re in the right place. Or even if you need a project to add to your resume: this is something that’s really visual, that can be really impressive looking.
This is an active tutorial. I’ve designed this project specifically for you to write your own code, and to make a video game that’s all your own.
We’ll be making a 2D game, using the Java Swing library, and this project builds off of the work we did in the Bob Ross «Joy of Coding» video. So if you get really confused as I start to go through this, or if you need some more practice with 2D graphics, then you should go back and do that project first. And that should give you everything you need to be ready for this one.
My idea for this project was: there’s certain things in developing a game that are just kinda difficult, but they’re unavoidable. And I don’t want to overwhelm you with things you might not be ready for yet, that maybe are acting as a barrier to you having fun with code. So I thought I’d start you off with like a template project. Just a real simple game that gets you passed some of those initial hurdles, so you can get to the fun parts.
Now I’m not going to do a full code-along this time, but I want to get you familiar with the codebase you’ll be working with. So what I think we’ll do is: in the first half of this video I want to show you how I built up this code, So that you can feel comfortable with it even if you don’t understand what every line does.
Then in the second half I want to give you a bunch of ideas and direction for different ways you can build out your game. Sort of like little homework projects that can all add up to a game that’s uniquely yours. And I’m going to be breaking down those ideas from easiest to hardest, so you can properly progress your skills as you work on your game.
So if you’re ready, the first thing you’ll want to do is: download this project off of Github, run it once to make sure it’s working, and then come back here and we’ll talk through the code. You can either clone it, if you’re familiar with Git, or you can just download the .ZIP file.
Now let’s talk about some of the things you can do with this starter code, to build out your own game. You’re not meant to do all of these. Just pick and choose things you like or want to try. And if you have any ideas that aren’t on these lists, definitely just go for it.
Beginner
- Change the colors that are being used.
- Change the image files that are being used.
- Change how many points you get per coin.
- Make instance or class variables to control hardcoded values like the ones just mentioned.
- Use WASD instead of arrows for movement.
- Change the dimensions of the game board.
- Make a new coin appear whenever the player picks one up.
- Change the tile size.
- Remember to update your image files, or scale the images.
Intermediate
- Make coins disappear after some time.
- By ticks, or using a separate timer, or after the player has moved so many squares.
- Could count up or down.
- Could replace the score or be in addition to the score.
- Display it like the score.
- In a single play session.
- Or across all sessions by reading/writing to a file.
Advanced
- Add obstacles to block player movement.
- Add an object type that reduces your score when touched. Or maybe it ends the game.
- Make an object type that moves around on its own. Could be like the ghosts from pacman.
- Add sounds.
- When a player moves, or picks up coins.
- A constant sound track.
- A sound that plays when you first open the game.
- Can play around with the tick rate when developing this.
- React to both pressed and released.
- Can enable diagonal movements.
- Fixes the issue caused by holding down a key, and makes for a more responsive experience.
- So maybe the viewport moves as the player approaches an edge.
- Or maybe the player stays in the middle and the whole viewport moves with the player whenever the player moves.
- Can be as simple as changing some colors in the game.
- Or maybe you’ve got health potions to restore player health.
- Maybe move this off of the game board itself, to some designated area on the canvas. I recommend still using just the single JPanel if you want to do this.
Expert
To dive even deeper into developing your Java 2D game, I recommend checking out this series of tutorials for guidance and inspiration: https://zetcode.com/javagames/
Alright so good luck on building what’s probably your first computer game! Hopefully you’ve got a lot of ideas, and some sense of how you might accomplish them. I really tried to strip this project down, and make it as easy for you to build off of as possible.
Once you’ve finished your project, and you’re wondering what’s next? First of all I’m super proud of you: you’ve accomplished something most people will only ever dream of. And the next step would be to just make another game, but push yourself to be a little more ambitious this second time around.
And then after that you’re ready to graduate to a proper game development library. I’ve never used any Java game development libraries, so I can’t really give you any recommendations there. But let me know if you end up finding one you like, and maybe I can check that out in a future video.
Java и создание игр: о движках от А до Я

Создание развлекательных приложений и игр – перспективные направления в программировании. Пользователи готовы не только скачивать соответствующий контент бесплатно, но и платить за него. Особенно тогда, когда софт получается действительно качественным.
Во время создания игр можно использовать разнообразные языки программирования. Некоторые разработчики предпочитают Си-семейство. Оно универсально, но новичкам «с нуля» приступить к коддингу будет трудно. Поэтому тем, кто только начинает изучать процесс разработки игр и программирования, стоит обратить внимание на Java. Это – весьма простой язык, посредством которого можно создавать уникальные перспективные проекты с минимальными трудностями. Основной принцип Джавы – меньше писать, больше делать.
Движок – это…
Перед тем, как приступать к работе с кодом и задумываться над созданием игр, нужно уяснить – справиться с поставленной задачей удастся только при помощи так называемого движка. Термин слышали многие, но не все понимают, что это такое.
Игровой движок – совокупность неких модулей программного типа, которые включают в себя различные элементы, задействованных при создании игр и развлекательных приложений. Готовый «сборник» утилит. Выступает в качестве базового программного обеспечения при разработке игрового софта.
При помощи движка можно обеспечить:
- музыкальное и звуковое сопровождение;
- сетевую игру;
- графическую визуализацию;
- перемещение внутриигровых персонажей (а также их взаимодействие согласно имеющимся скриптам);
- соблюдение физических эффектов и закономерностей;
- встроенные графические сцены.
Грамотно подобранный движок дает разработчику больше возможностей при коддинге. С ним создавать игры для Андроид, Windows/Mac и iOS просто и интересно. Навыки программирования могут быть минимальными.
Движки для программистов и библиотеки на Джаве
Ява – язык программирования, который пользуется у программистов очень большим спросом. Освоить его способен даже новичок без существенных затруднений. Большинство современных платформ для создания игр поддерживают Java-семейство. Это позволяет программерам и разрабам выбрать оптимальный для себя «пакет» готовых утилит при создания развлекательного контента. Далее будут перечислены лучшие движки JavaScript и библиотеки.
GDevelop
Универсальная утилита – подходит и новичкам, и продвинутым программистам. С ее помощью можно сделать:
- платформеры;
- шутеры;
- элементарные игры 8-bit.
Создана для того, чтобы дать возможность разработчикам (особенно новичкам) освоить работу с 2d-играми. Трехмерную графику не поддерживает.
GDevelop предлагает экспорт на различные платформы: Android, iOS, FaceBook (ныне Meta) Instant Games и не только. Подойдет тем, кто заинтересован в экспортировании игр, но не хочет углубляться в непосредственную разработку софта и долго изучать низкоуровневую архитектуру игровых движков.
MelonJS
Еще один вариант, если хотите научиться делать собственные 2D-игры. Подключив соответствующую библиотеку к коду, можно получить доступ к качественной поддержке:
- физики;
- столкновений;
- спрайтов;
- деформаций.
В успешных проектах все это играет огромную роль. Из минусов – не самая лучшая документация. Зато пользовательского контента у MelonJS полно. А еще имеется отличное комьюнити.
Идеальный вариант для новичков. Является весьма мощным инструментом в умелых руках. Но продвинутым программерам предлагаемых возможностей будет маловато.
ImpactJS
Имеет ориентацию преимущественно на двухмерную графику. В отличие от предыдущих вариантов обладает плагинами, которые при добавлении в Impact позволяют имитировать 3D-среду.
Дополнительно к Impact «идут» следующие инструменты:
- редактор уровней;
- дебаггер;
- фреймворк для публикации в Ejecta.
Через Impact удается без проблем размещать утилиты в AppStore.
Babylon
Мощный инструмент, предусматривающий веб-рендеринг. Игровым движком его назвать нельзя, но на основе BabylonJS удастся создать game. Движок рендеринга предусматривает доступ к низкоуровневому функционалу.
Babylon – утилита, которая подойдет продвинутым программистам. Новичкам с ней работать затруднительно, особенно если учесть, что это – не совсем игровой движок.
PhaserJS
Среди популярных вариантов, поддерживающих Java, выделяют PhaserJS. Он позволяет программировать не только для компьютеров, но и для мобильных устройств. Обладает поддержкой WebGL. Годится для написания 2D-софта.
Это – бесплатный движок. За дополнительную плату можно подключить особые плагины, значительно увеличивающие мощь «пакета».
Библиотека, задействованная при программировании в двухмерном пространстве. Работает с WebGL, задействуется для воплощения потрясающих интерфейсов. И не обязательно они будут размещаться в играх.
Включает в себя:
- шейдеры;
- текст;
- спрайты.
Идеальный вариант для тех, кого больше беспокоит визуализация. Для сложных и весьма крупных проектов лучше воспользоваться каким-нибудь другим вариантом.
PlayCanvas
Среда программирования для развлекательных приложений, включающая в себя все необходимое разработчику. Здесь удается не только писать коды, но и проводить тестирование, настройку сцен, экспорт контента в одно нажатие.
PlayCanvas – условно-бесплатный «набор программиста». Годится для небольших публичных проектов. За «тайные» коммерческие идеи предстоит платить ежемесячно.
A-Frame
Инновационное решение в программировании. A-Frame может предоставить пользователям больше возможностей, нежели предыдущие библиотеки. И все это за счет того, что ориентирован движок на VR и AR.
Синтаксис напоминает HTML-верстку. Подойдет для 3d-программирования с «полным погружением». В основном утилитой пользуются опытные программеры.
PhysicsJS
Основан на физическом взаимодействии имеющихся объектов. Используется при разработке всех видов игрушек. Для Андроид в том числе.
Отличное решение для тех, кому важна сложная физика в реализуемом софте. То же самое касается применения при создании собственных движков на основе уже имеющихся библиотек.
Универсальные решения для программистов
Перечислять программы, при помощи которых можно создавать любые игрушки для мобильных и компьютерных устройств, удается бесконечно долго. Но в мире сложилась тенденция, согласно которой несколько вариантов вышли на передовую. Они используются программистами на разных языках чаще остальных. К концу статьи каждый потенциальный разработчик сможет выбрать платформу, с которой он будет работать, зная Java.
Unreal Engine 4
Настоящая легенда в сфере gaming programming. Разрабатывался «пакет» с 1998 года. С тех пор все время совершенствуется и дорабатывается. Современная версия UE 4 является универсальной. При помощи нее создаются развлекательные приложения для:
- игровых консолей;
- мобильных платформ;
- компьютеров.
Является частично бесплатным. Платить за использование оного не нужно, если прибыль с созданного приложения в месяц не переваливает за 3 000 долларов США. В противном случае предстоит переводить создателям движка проценты с получаемых доходов.
Unity
Юнити – популярный вариант среди разработчиков. Обошел иные платформы для создания игр, благодаря простоте осваивания. Развивается с 2005 года.
Подойдет для 3D-игрушек. Как и предыдущий вариант, является кроссплатформенным. На Юнити пишут не только простые игры (головоломки, аркады), но и шутеры от первого лица с тщательно проработанным игровым миром.
Недостаток один – графика в созданных утилитах далека от 100% реалистичности. Если разработчику важна графическая составляющая, лучше пользоваться UE 4. Несмотря на это, более половины утилит для Android написаны именно на Unity. Подходит как новичкам, так и продвинутым программистам.
Corona
Программы для создания игрушек можно перечислять бесконечно долго. И выбрать что-то одно бывает непросто. Добавить к списку наиболее успешных и популярных «пакетов» можно утилиту под названием Corona SDK.
Он выступает в качестве платформы для двухмерных игр. Предусматривает:
- поддержку API;
- сложные функции в 2D-играх;
- в основе API используется Luna;
- монетизацию через Corona Ads.
Данный вариант является кроссплатформенным. Подходит и для Андроид, и для iOS. Осваивается без существенных затруднений, поэтому идеальна для новичков. Имеется тестирование в режиме реального времени.
Обладает разнообразными полезными фитчами:
- Sublime Text;
- Corona Editor;
- Composer GUI.
Через Corona’s Physycs Engine можно отслеживать взаимодействие игровых объектов между собой. Этот прием позволяет довести физику в развлекательном софте до идеального состояния с минимальными временными потерями.
Как создать собственную игру – советы
Для того, чтобы писать программы и игровой контент на Java, рекомендуется изучить основы программирования. Существуют следующие варианты развития событий:
- Самообразование. Результат виден лишь у целеустремленных будущих программистов. В интернете полно полезной информации по рассмотренной тематике. И не всегда за нее нужно платить.
- Обучение в ВУЗе. Подойдет направление «Программирование». В некоторых университетах есть вариант «геймдев». Долгий и дорогостоящий вариант, но в результате на руках окажется диплом. Выпускник сможет писать сложные программы.
- Прохождение курсов.
Последний вариант больше всего подходит тем, кто не готов сидеть 5 и более лет в университете. Специализированные образовательные центры предлагают как очные/заочные курсы, так и дистанционные.
Преимуществом такого подхода является то, что человек может выбрать узкую направленность. Пример – изучение только процесса создания игр на Android или iOS. В конце обучения (длится до года) выдается сертификат установленного образца. При желании можно изучать движки для игр iOS, Windows, Android более подробно. Для самых популярных «утилит» существуют отдельные курсы. Делятся они по уровню навыков. Подходящие уроки подберет себе и новичок, и продвинутый программер.