Как сделать игру на java

Как сделать игру на java

Подробные руководства, как создать простые игры на Java меньше, чем за час

Как написать свой Тетрис на Java за полчаса

В предыдущих статьях этой серии мы уже успели написать сапёра, змейку и десктопный клон игры 2048. Попробуем теперь написать свой Тетрис.

Как написать свою 2048 на Java за 15 минут

В предыдущих статьях этой серии мы уже писали сапёра и змейку на Java, а теперь попробуем написать десктопный клон игры 2048.

Вакансии, где нужны знания по теме «Создание простых игр на Java»

Как написать свою змейку на Java за 15 минут

В предыдущей статье мы писали сапёра за 15 минут, теперь займёмся классической змейкой.

Доброго времени суток всем!

В этой статье будет описываться создание 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?

Ничего объективного я тут не скажу, а скажу лишь то, что я люблю этот язык, и мне нравиться писать на нем. Да, на Java нет игр AAA-класса, но Java предоставляет огромные возможности, больше кол-во встроенных средств и быстроту написания кода.

Начнем с выбора IDE. Я являюсь фанатом Eclipse и посоветую вам его.
Если же почему-то вам он не понравился, вы можете использовать NetBeans, Intellij IDEA или командную строку и ваш любимый редактор.

И скачаем JDK последней версии: JDK 7u4

Скорее всего проблем с установкой IDE у вас не возникнет, а если у вас 64-битная система, все же посоветую устанавливать 32-битный Eclipse, так как иногда бывают ошибки и Eclipse у вас просто не запустится.

Под катом мы приступим к созданию игры.

Класс Game

Итак, создаем проект, в нем класс Game(попутно создав в нем точку входа). Данный класс должен наследовать класс Canvas и реализовать интерфейс Runnable:

Создадим переменную running типа Boolean, которая, как вы уже догадались будет показывать нам запущена ли игра, или нет.

Создадим функцию start() и в ней мы будем создавать новый поток и переводить running в true:

Создадим три функции — update(long delta), render() и init(). Я надеюсь что их значение вам понятно. В функции run() создадим главный игровой цикл, перед ним будем вызывать init(), а в нем самом render() и update(). Так же мы будем вычислять разницу между кадрами(delta time).

Пока поработаем над функцией render().

Вам наверное уже не терпится запустить и попробовать, но не спешите. Мы должны создать фрейм и добавить наш холст на него. Заодно и объявим три переменных.

Примерно вот так выглядит наш класс Game сейчас.

Класс Sprite

Создадим новый класс Sprite. Поскольку этот класс небольшой, я сразу приведу весь его код с комментариями:

Сразу же проверим работоспособность. Возьмем эту картинку и скопируем ее в папку с нашим классом Sprite. Добавим функцию getSprite() в класс Game(временно).

Добавим нашу картинку в папку assets(папку создать в корне проекта), саму папку надо добавить в build path.

Далее создаем переменную hero типа Sprite. В функции init() инициализируем ее. В Функции render() рисуем:

Input

Для обработки инпута мы создадим класс, наследующий KeyAdapter:

Тут же и объявим две переменных в шапке класса Game:

Внутри класса KeyInputHandler создадим две функции:

Теперь в функции init() добавим следующее:

Создадим переменные x и y для героя(так как пока что мы еще не написали класс Entity). Сделаем чтобы герой всегда рисовался на этих координатах.

Читайте также:  Горячие кнопки в ворде

А теперь в функции update() будем проверять нажаты ли клавиши и изменять x-координату.

Спасибо за внимание.

Ой, у вас баннер убежал!

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket

Похожие публикации

  • 29 августа 2011 в 11:52

Окна «неправильной» формы, Java 6 & 7 ed

На чём и как писать (часть 1. Eclipse и Java)

Вышел GAE Java SDK 1.2.1

Вопросы и ответы

Как на Андроид уведомление по расписанию сделать?

Spring Stomp + ActiveMQ и новые адреса назначения, как быть на клиенте?

Запутался вообще?

Как организовать доставку jar к пользователю?

Как отдавать данные в tomcat?

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 49

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

P.S. При комбинации клавиш «Alt + Print Screen» будет захвачено только активное окно и не будет необходимости резать скриншоты.

А я как раз таки наоборот, очень рад что не связался с джавой =) на делфи, кстати, можно легко писать казуалки, в том числе и тридешные (ну это я еще о том времени, когда люди ставили игры на комп, а не играли в социалках), да и в любом случае, нативный код будет быстрее чем джавовский через ВМ, а в играх это довольно критично.

И в качестве оффтопика (надеюсь меня не забрасают тапками, но меня действительно волнует эта тема). Кроме того что в играх важна скорость реакции, она так же важна и в любых других приложениях, а в особенности мне, как программисту, хочется скорости и гибкости среды разработки, в которой я работаю (пишу на флеше и js). Так вот, я не понимаю, как стали столь популярными IDE на основе еклипса? С огромнейшим контекстным меню, с кучей всяких не особо полезных и не всегда работающих штук, аля комбайн. Может быть я как то не правильно пользуюсь ими? Даже вебшторм подтормаживает, когда в процессе прокрутки попробовать открыть контекстное меню (MBA 2011). Быть может правильно использовать данные программы для того же C++ или самой Java? Но непонятно, почему тогда те же JetBrains используют ее для своих продуктов? И самым недоразумением во всей этой компании для меня является Flash Builder. Почему Adobe не написали на том же ейр удобный и заточенный именно под флеш инструмент? Еще в эклипсе предусмотрен механизм установки плагинов, но почему он такой не прозрачный и непонятный? почему нет маркета какого-то по категориям например?
Заранее благодарю за ответ на мою эмоциональную простыню и готов признать, что я предосудительно отношусь к ПО на java в случае приведения рациональных аргументов)

Ссылка на основную публикацию
Как связаться с инстаграм по телефону
В этой статье расскажем о том, как работает горячая линия линия Инстаграмм, можно ли обратиться по телефону или доступен только...
Как разблокировать телефон samsung galaxy j1 mini
Характеристики Samsung Galaxy J1 mini Отзывы о Samsung Galaxy J1 mini Инструкция Samsung Galaxy J1 mini Прошивка Samsung Galaxy J1...
Как разблокировать флешку от защиты записи
Извиняюсь за заголовок, но именно так задают вопрос, когда при действиях с USB флешкой или SD картой памяти Windows сообщает...
Как связаться с инстаграмом
В этой статье расскажем о том, как работает горячая линия линия Инстаграмм, можно ли обратиться по телефону или доступен только...
Adblock detector