Перейти к содержимому

Как написать игру для кнопочного телефона

  • автор:

Пишем игру для телефона. Часть 1 — Простейшее приложение

С приходомMIDP 2.0 API написание игр для мобильных устройств превратилось в очень приятное и занимательное занятие. Меня, как разработчика не могут не радовать появившееся во второй версии богатые графические возможности. Конечно, игры можно было писать и сMIDP 1.0 (Atair 2600 яркое тому подтверждение), но это требовало такого терпения и упорства, что многие не выдерживали, да и возможности были весьма скудными.MIDP 2.0 по прежнему не позволяет писать игры сопоставимые по уровню с играми современных PC. По понятным причинам телефоны всегда будут отставать по своим возможностям от настольных компьютеров. Однако уже сейчас вы можете писать игры уровняSuper Mario Brothers и Alladin.

В этом руководстве описывается создание простого игровогоMIDlet-а (Maidlet — это такое приложение, которое можно запускать на мобильном телефоне). Подразумевается,что Вы знакомы с языком Java, но не знаете что такоеJ2ME.

Собственно, что мы будем разрабатывать? Игра очень проста. Вы управляете ковбоем, который бегежит через прерии, перепрыгивая через перекати-поле. Конечно, это очень глупая игра, но с ее помощью можно продемонстрировать основные приемы, которые вам понадобятся при написании серьезных игр.

Если Вы все еще не списали J2ME, то самое время сделать это. http://java.sun.com/j2me/download.html.Java 2 Micro Edition Wireless Toolkit включает в себя простую Среду разработки MIDlet-ов, эмулятор мобильного телефона, и несколько полезных примеров. Я не собираюсь Вам детально описывать инсталяцию. Статья об этом есть на нашем сайте.

Если Вы начнете изучать демонстрационные приложения, то обнаружите, что они состоят из двух файлов: *.jad и *.jar. Jar файл — это архив, в котором содержатся файлы классов, ресурсов, и манифест. Jad файлы (файлы дескриптора) содержат описательную информацию, которая помогает устройству загрузить MIDlet. В Jad файле должены быть описаны размер приложения и URL jar файла MIDlet-а. Ниже приведен пример jad файла Hello World приложения:

MIDlet-1: Hello World, /icons/hello.png, net.frog_parrot.hello.Hello
MMIDlet-Description: Hello World for MIDP
MIDlet-Jar-URL: hello.jar
MIDlet-Name: Hello World
MIDlet-Permissions:
MIDlet-Vendor: frog-parrot.net
MIDlet-Version: 2.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
MIDlet-Jar-Size: 3201

Свойство MIDlet-1 (и MIDlet-2, и т.д.) включает имя MIDlet-а, положение его иконки, а также название класса, который должен быть запущен. Первые две строки описывают как MIDlet появится в меню MIDlet-ов. Иконка должна содержаться в jar архиве, и ее путь должен быть представлен в формате, используемом в методе Class.getResource(). В этом примере jar содержит папку icons, в которой находится иконка hello.png. Она выглядит вот так:

Свойство MIDlet-Jar-Size определяет размер jar файла в байтах. Будте осторожны, поскольку если Вы перекомпилируете демо проекты или свое приложение, используя build скрипт, то Вы должны вручную изменить размер полученного jar файла в дескрипторе. Если MIDlet-Jar-Size в jad файле не соответствует размеру jar файла, MIDlet не запустится. (Вместо того, чтобы каждый раз вручную править jad файл, я использую простой скрипт, который вы можете найти в Приложение А.) MIDlet-Jar-URL определяет адрес jar файла MIDlet-а относительно jad файла. Если оба этих файла находятся в одной папке, то сюда надо написать просто имя jad файла. Назначение остальных параметров очевидно и не нуждается в комментариях.

Hello World

Чтобы проиллюстрировать базовые компоненты MIDlet-а я написал еще одну версию «Hello World» приложения. MIDlet выводит на экран телефона сообщение «Hello World!» и убирает его по нажатию клавиши «Toggle Msg» . Нажатие кнопки «Exit» приводит к закрытию MIDlet-а. Приложение состоит из двух классов: MIDlet класс Hello и Canvas класс HelloCanvas. Принцип работы приложения достаточно очевиден, поэтому я ограничился комментариями внутри листинга.

******************* Листинг файла Hello.java************************ package net.frog_parrot.hello; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * Это главный класс нашего приложения. * * @автор Carol Hamer */ publicclass Helloextends MIDlet implements CommandListener{ /** * Canvas - это участок экрана, который будет отведен игре. */ HelloCanvas myCanvas; /** * Command - объект, содержащий кнопки. */ private Command exitCommand=new Command("Exit", Command.EXIT,99); /** * Command - объект, содержащий кнопки. */ private Command newCommand=new Command("Toggle Msg", Command.SCREEN,1); /** * Инициализация canvas и commands. */ public Hello(){ myCanvas=new HelloCanvas(Display.getDisplay(this)); myCanvas.addCommand(exitCommand); myCanvas.addCommand(newCommand); myCanvas.setCommandListener(this); } //---------------------------------------------------------------- // Выполняемая чсть MIDlet-а /** * Запуск приложения. */ public void startApp() throws MIDletStateChangeException{ myCanvas.start(); } /** * Если MIDlet использует ресурсы, они должны быть * удалены из памяти в этом методе. */ public void destroyApp(boolean unconditional) throws MIDletStateChangeException{ } /** * Этот метод вызывается, чтобы известить MIDlet о переходе * в режим паузы. MIDlet должен использовать своевременно для * освобождения части ресурсов. */ public void pauseApp(){ } //---------------------------------------------------------------- // Выполняемая чсть CommandListener /* * Вывод результата вызова команды (пауза или выход). */ public void commandAction(Command c, Displayable s){ if(c== newCommand){ myCanvas.newHello(); }elseif(c== exitCommand){ try{ destroyApp(false); notifyDestroyed(); } catch(MIDletStateChangeException ex){ } } } } **************** Листинг файда HelloCanvas.java******************** package net.frog_parrot.hello; import javax.microedition.lcdui.*; import javax.microedition.lcdui.game.*; /** * Этот класс предоставляет часть экрана, которая отведена нашей игре. * @Автор Carol Hamer */ publicclass HelloCanvasextends javax.microedition.lcdui.game.GameCanvas{ //--------------------------------------------------------- // поля /** * Указатель на экран устройства */ Display myDisplay; /** * Должен ли экран в данный момент отображать сообщение. */ boolean mySayHello=true; //----------------------------------------------------- // Инициализация и изменение состояния игры /** * Конструктор просто устанавливает экран. */ public HelloCanvas(Display d){ super(false); myDisplay= d; } /** * Начало приложения. */ void start(){ myDisplay.setCurrent(this); repaint(); } /** * * Изменить состояние отображения сообщения. */ void newHello(){ mySayHello=!mySayHello; // Перерисовать экран. repaint(); } //------------------------------------------------------- // Графические методы /** * Очистить экран и если надо показать сообщение. */ public void paint(Graphics g) // x и y - координаты верхнего левого угла игрового экрана. int x= g.getClipX(); int y= g.getClipY(); // w и h ширина и высота зоны экрана. int w= g.getClipWidth(); int h= g.getClipHeight(); // Очистить экран (закрасить белым). g.setColor(0xffffff); g.fillRect(x, y, w, h); // Если нужно, вывести сообщение. if(mySayHello){ Font font= g.getFont(); int fontHeight= font.getHeight(); int fontWidth= font.stringWidth("Hello World!"); // Устанавливаем красный цвет для текста. g.setColor(0x00ff0000); g.setFont(font); // Выводим строку в центре экрана. g.drawString("Hello World!",(w- fontWidth)/2, (h- fontHeight)/2, g.TOP } }

Автор Carol Hamer
Перевод: Alex.

Создание игр для мобильных телефонов

Книга «Создание игр для мобильных телефонов» – это практическое руководство, которое поможет разработать и реализовать игру для мобильного телефона. Книга написана простым языком, не содержит сложной и скучной теории программирования и шаг за шагом знакомит с методикой создания технологии «plug-and-play» применительно к созданию огромного количества игр. В издание включены подробные описания и примеры кодов для четырех игр, а также информация, необходимая для реализации вашей собственной задумки. Если вы любите играть в игры и занимаетесь программированием, то эта книга – для вас! Компакт-диск прилагается только к печатному изданию.

Оглавление

  • Об авторе
  • Посвящение
  • Благодарность
  • Мы хотим услышать вас
  • Поддержка книги
  • Введение
  • Часть I. Основы программирования игр для мобильных телефонов

Итак, я сижу в кресле стоматолога, жду, пока подействует укол новокаина и мне запломбируют коренной канал. Внезапно ко мне приходит мысль, что я могу потратить это время с куда большей пользой, чем просто ждать. Хотя стоматологическое кресло и слюнявчик ограничивают свободу действий, они не смогут помешать мне сразиться с несколькими сотнями моих близких друзей и заклятых врагов. Быстрым движением руки я достаю из кармана мобильный телефон, поддерживающий Java, и запускаю игру, которая поможет мне не думать об устрашающих инструментах дантиста.

Некоторое время назад я и сам скептически относился к тому, что можно на самом деле сделать на устройстве, которое я часто поднимаю с земли и молю Бога о том, чтобы оно работало. Давайте рассмотрим проблему: мобильные телефоны — это совсем не то, что мы представляли себе, когда думали о будущем интерактивных развлечений. Однако теперь мобильные телефоны превратились в игровые машины, и если вы читаете эту книгу, очевидно, вам хочется проникнуть в мир игр.

Хотя логично объединить в одну группу мобильные телефоны и другие типы переносных устройств (Palm Plot, Pocket PC и Game Boy), в этой книге рассматривается вопрос программирования игр именно для мобильных телефонов. Я не против других устройств, однако ни одно из них не получило столь широкое распространение. Вспомните хотя бы пятерых ваших знакомых и посчитайте, сколько у них сотовых телефонов. Если ответ меньше, чем 4, то дайте им еще пару лет. Вне зависимости от того, смогла ли убедить вас моя речь, мобильные телефоны завоевывают мир с огромной скоростью, и она постоянно увеличивается!

Итак, обладатели персональных коммуникаторов (мобильных телефонов) используют их главным образом для общения друг с другом. Но в наше время появляются новые технологии, которые помогут расширить границы их применения. Технологии, подобные Java, наделяют мобильные телефоны практически теми же возможностями, которыми обладают настольные компьютеры. Совместите это со способностью всех мобильных телефонов поддерживать работу с беспроводными сетями, и вы получите уникальное устройство: широко распространенное, компактное, переносное, работающее с сетями, программируемое — просто мечта для создателя игр!

Я бы солгал, если сказал бы, что программирование игр для мобильных телефонов уже хорошо развито. Технологии новы, а модели телефонов, поддерживающие их, еще более новы. Но, как вы, вероятно, знаете, чтобы быть в курсе новых технологий, нужно быть на шаг впереди них. Учась разрабатывать и создавать игры для мобильных телефонов по мере развития этой сферы, вы сможете в большей степени пользоваться открывающимися возможностями. Игра ли это, которой вы хотите поделиться с друзьями и родственниками, новый хит в среде коммерческих игр, который обеспечит вам место в зале славы создателей игр, — в любом случае в этой книге вы найдете все, что нужно для начала работы. На рис. 1 показан пример игры, которую вы создадите, пользуясь этой книгой.

Рис. 1. Игра Henway очень похожа на классическую аркаду Frogger

Игра Henway, показанная на рис. 1, очень похожа на классическую аркаду Frogger. Если вам не по душе переводить цыпленка через дорогу, вас, вероятно, привлечет другая игра — High Seas (рис. 2).

Рис. 2. Игра High Seas впитала все преимущества перемещающегося фона и «интеллектуальных» компьютерных врагов

High Seas — это игра, в которой вы бороздите морские просторы и спасаетесь от пиратов, избегаете спрутов, плавающих мин и большого корабля пиратов. И это только две игры из пяти, которые вы создадите, работая с книгой. Пусть остальные игры станут для вас сюрпризом!

Для написания игр для мобильных телефонов в этой книге отдано предпочтение языку программирования Java, и для этого есть причина. Я более подробно рассмотрю этот вопрос в главе 1, но если говорить коротко, Java — это доминирующий инструмент разработки игр в настоящее время и в обозримом будущем. Если вы не знаток Java, то на прилагаемом компакт-диске можно найти программу обучения этому языку программирования, «Java Programming Primer». Вне зависимости от того, как вы относитесь к Java в настоящее время, думаю, что к концу прочтения книги, вы согласитесь, что это идеальная технология для разработки игр для мобильных телефонов.

Меня часто спрашивают, какой мобильный телефон я использую для отладки игр. Я отвечаю, что огромный, который лежит на моем столе. Я говорю о своем настольном компьютере, который значительную часть времени я использую в качестве эмулятора мобильного телефона. На сегодняшний день на рынке так много телефонных аппаратов, а новые модели появляются настолько часто, что было бы невозможно порекомендовать какую-то определенную модель, не перенося сроки издания этой книги. Поэтому я советую использовать эмулятор Java, входящий в состав J2ME Wireless Toolkit, который вы можете найти на сопроводительном CD. Конечно, вы наверняка захотите протестировать созданные игры и на реальном сотовом телефоне, но вы оцените, насколько удобно применять эмулятор.

Так же, как и программирование игр для настольных компьютеров и консольных систем, создание игр для мобильных телефонов — дело непростое. Вам придется использовать и комбинировать различные приемы и методы программирования, не забывая и про хорошую порцию креативного мышления. Именно сочетание креативного мышления и технических навыков делает программирование игр столь притягательным. Добавьте к этому еще необходимость создания игры на миниатюрном устройстве, имеющем беспроводное соединение с сетью, и вы получите рецепт «техновеселья»!

Как построена эта книга

Эта книга разделена на пять частей, каждая из которых затрагивает различные вопросы программирования игр:

► Часть I: «Основы программирования игр для мобильных телефонов». В этой части вы познакомитесь с основами разработки мобильных игр на основе языка Java и познакомитесь с J2ME Wireless Toolkit. Вы создадите «скелет» игры для мобильного телефона, который будете впоследствии использовать при работе с книгой для написания остальных игр, протестируете созданную игру с помощью эмулятора мобильного телефона Java.

Часть II: «Специфика создания мобильных игр». В этой части книги вы научитесь использовать графику в мобильных играх, создавать изображения. Вы также узнаете об анимации с использованием спрайтов (спрайт — небольшое изображение, переносимое по экрану независимо от других. — Прим. перев.). Этот метод создания анимации является основным приемом программирования Вы также разработаете две игры: Henway и Cat Catcher. Примечательно, что в этой части книги рассматриваются игры, героями которых являются животные. Не волнуйтесь, чуть позже мы доберемся до пиратов и пришельцев.

Часть III: «Виртуальные миры и интеллектуальные мобильные игры».

Эта часть познакомит вас с применением слоев и их использованием для создания игр с перекрывающимися объектами. Вы познакомитесь с основами создания Искусственного Интеллекта (ИИ), узнаете, почему он столь важен для игр. Тема ИИ очень сложна, поэтому я обращу ваше внимание лишь на основные и несложные приемы, которые вы сможете воплотить в своих играх. Также в эту части книги включено создание еще одной игры, High Seas, в которой вы будете бороздить морские просторы и сражаться с пиратами и морскими чудовищами.

Часть IV: «Преимущества беспроводной сети». В этой главе вы узнаете, как использовать главную возможность мобильного телефона — беспроводную сеть. Научившись основам сетевого программирования игр, вы создадите игру NetConnect4 — сетевой аналог популярной игры Connect4. А затем вы разработаете и создадите игру Mad Plumber, в которой вам придется соревноваться с противником в скоростной прокладке водопроводных труб.

Часть V: «Совершенствование игр». Из этой главы вы почерпнете ряд интересных приемов программирования игр, которые помогут вам сделать игры как можно более красивыми. Также вы узнаете, как создавать и сохранять в телефоне список лучших игроков. В этой части книги вы создадите еще одну игру, Space Out, — космическую «стрелялку», для разработки которой вам потребуется применить все знания, полученные при работе с предыдущими частями.

Что вам потребуется

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

Все примеры, рассматриваемые в книге, вы можете найти на прилагаемом CD, включая командные файлы, используемые в командной строке J2ME Wireless Toolkit для построения и запуска игр. Пакет J2ME Wireless Toolkit вы также можете найти на сопроводительном компакт-диске. Как я уже упоминал, в составе пакета J2ME Wireless Toolkit вы также найдете инструмент KToolbar, который чрезвычайно полезен для создания и тестирования примеров. Все примеры в книге разработаны так, что их можно легко открыть, откомпилировать и эмулировать с помощью KToolbar.

Пишем 2d-игру на Java

В этой статье будет описываться создание 2D игры на Java. Сразу предупреждаю, вы должны хотя бы базово знать язык Java, поскольку на подробное объяснение каждой строки у меня нету времени. И очень прошу вас, не списывать просто код, а пытаться понять что означает каждая строка, и писать со смыслом. И еще, я использую Eclipse, но вы можете использовать любой IDE.

Задача:

Я планирую создать игру, напоминающую шутер с видом от 3 лица.

Начало:

Ну что, приступим!

Для начала создадим проект. Назовем его «Just game». И сразу создаем класс Display.java. В него пишем:

public static void main(String[] args) < JFrame frame = new JFrame(/* название нашей игры */); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true); frame.setVisible(true); >

Теперь разберемся, что мы сделали.

JFrame frame = new JFrame(/*название нашей игры*/);

мы создаем рамку, которая и будет отображаться при запуске нашей игры

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

устанавливаем операцию, которая будет происходить при нажатии на крестик. EXIT_ON_CLOSE — выйти из программы

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true);

устанавливаем нашей рамке максимальные размеры, убираем декорации(кнопки свернуть, закрыть, уменьшить/увеличить и т.п.), т.е. делаем игру на весь экран. Если вы хотите, чтобы игра не была бы на весь экран, то используйте:

frame.setSize(/*ширина*/,/*высота*/); frame.setResizable(false); //false чтобы нельзя было бы поменять размеры рамки, true -можно
frame.setVisble(true);

— делаем рамку видимой

Только не забудьте, все настройки рамки надо писать до того, как вы сделаете её видимой

Ну чтож, теперь нажимаем «Run» и пробуем запустить нашу игру. Если все написано правильно, у вас не должны возникать ошибки и должно появиться пустое, серое окно.

Серое окно… Как скучно… Давайте создадим что-нибудь поинтереснее.

Создадим новый класс, под названием «Main». Main класс у нас будет являться панелью, которую мы вставим в рамку, по этому он должен расширять JPanel. (Для тех, кто не знает, расширять пишется как extends после названия класса)

Возвращаемся в класс Display и после настроек рамки, но перед установлением её видимости, пишем:

frame.add(new Main());

Вы спросите — «Ну и зачем мы это сделали?». Представьте себе картину. Эта картина и является конечная наша игра. А теперь представьте рамку. Без ничего внутри, просто пустую рамку. На ней ничего нельзя нарисовать, она бесполезна. Для этого, мы вставили в картину пустой лист, на котором программа в дальнейшем может рисовать картину. На этом закончим наше лирическое отступление и вернемся к классу Main.

Нам нужно осуществить отрисовку, по этому мы должны добавить метод paint. Для этого пишем:

public void paint(Graphics g) < //отрисовка всех объектов >

Ну и для начала, можем написать внутри этого метода отрисовку линии. Для этого пишем:

g.drawLine(20, 20, 100, 100);

Теперь запускаем программу, и видим:

image

Даааааа, не густо…

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

image

Для начала, нам нужно указать путь к картинке. Для этого не в методе paint, пишем:

Image img = new ImageIcon("2.png").getImage();

(предварительно надо в наш проект скинуть картинку и назвать ее 2.png)

После этого удаляем строчку отрисовки линии, а вместо нее в метод paint пишем:

g.drawImage(img, 0, 0, null);

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

drawImage(картинка которую мы будем рисовать, которую мы объявили раннее, координата X с которой будет рисоваться картинка, координата Y с которой будет рисоваться картинка, paint);

Отдельно хочу поговорить о параметре paint. Лучше всего оставляйте его null. Я только однажды сталкивался, когда мне нужно было использовать paint. Это было когда я отрисовывал текст, и задавал ему размер шрифта. Но советую не лезть туда и использовать null.

Теперь запускаем программу, и видим:

image

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

g.drawImage(img, 0, 0, 1920, 1080, null);

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

image

Ну наконец-то. Теперь мы умеем любые картинки растягивать на весь экран. Но вот проблема. Метод paint вызывается только один раз. И как же его обновлять постоянно? Для этого существует очень полезная вещь — таймер. Давайте создадим его.

Для этого пишем:

Timer timer = new Timer(20, this);

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

public class Main extends JPanel

Также, надо дополнить строку определения класса таким образом:

public class Main extends JPanel implements ActionListener

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

@Override public void actionPerformed(ActionEvent e) < // TODO Auto-generated method stub >

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

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

timer.start();

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

image

Размер картинки может быть любой, все равно её размер будет подгоняться прямо в программе. Ах да, разрешения компьютеров могут быть разные, так что добавим-ка в конструктор такие вещи:

 public Main(JFrame frame)

И перед конструктором добавим:

JFrame frame;

И сходим еще в класс Display.java и там немного изменяем метод frame.add:

frame.add(new Main(frame));

Таким образом, наша рамка будет передаваться в класс Main.java. Переходим в этот класс, и там где у нас метод paint() меняем строку drawImage() на:

g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null);

Таким образом, теперь наша игра будет отрисовывать картинку на весь экран, в независимости от его разрешения. Запускаем:

image

На сегодня все. Оставляю код, для тех, кто запутался:

Display.java

import javax.swing.JFrame; public class Display < public static void main(String[] args) < JFrame frame = new JFrame("JustGame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setUndecorated(true); frame.add(new Main(frame)); frame.setVisible(true); >> 

Main.java

import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Main extends JPanel implements ActionListener < Image img = new ImageIcon("2.png").getImage(); Timer timer = new Timer(20, this); JFrame frame; public Main(JFrame frame) < this.frame = frame; >public void paint(Graphics g) < g.drawImage(img, 0, 0,frame.getWidth(), frame.getHeight(), null); >@Override public void actionPerformed(ActionEvent e) < // TODO Auto-generated method stub repaint(); >>

Как программируют игры для мобильных телефонов?

Добрый день, интересует, как происходит программирование различных приложений (в данном случаи именно игр)
Понятно, что придется писать на java , порекомендуйте please приемлемую литературу по этому делу?
«Моррисон Создание игр для мобильных телефонов» не предлагать, только вчера начал её читать.Но не уверен , что это то что мне нужно.
И другой вопрос, но по этойже теме, как программировать 2d графику (конечно я не совсем правильно выразился, но суть ясна) для мобильных устройств? Да и 3d .

Deleted
17.02.11 18:05:49 MSK
1 2 →

Документация по Java2ME с оффсайта не подходит?

TheKnight ★★★
( 17.02.11 18:11:36 MSK )

> Понятно, что придется писать на java

совсем недавно было именно так, но сейчас же есть iOS, Android, Bada, т.е. можно писать как минимум еще на С, Obj-C, С++

aho
( 17.02.11 18:16:35 MSK )

Ява для обычных мобильных телефонов уже умерла. Зачем на ней писать?

Можно писать под ios и андроид.

note173 ★★★★★
( 17.02.11 18:19:47 MSK )
Ответ на: комментарий от note173 17.02.11 18:19:47 MSK

>Можно писать под ios и андроид.

а как же Windows Phone? можно же потерять кучу пользоваетлей Nokia.

anonymous
( 17.02.11 18:40:33 MSK )
Ответ на: комментарий от anonymous 17.02.11 18:40:33 MSK

Когда они будут - тогда и подумаем

namezys ★★★★
( 17.02.11 18:41:04 MSK )
Ответ на: комментарий от aho 17.02.11 18:16:35 MSK

То что писать на СИ можно это зашибенно, но какие проблемы потом возникнут?
Если не ошибаюсь, то если писать на java то тогда приложение должно работать на всех мобильных устройствах, (хоть и тормозно).
А при написании прог на си? надо будет для каждого устройства производить отдельную компиляцию? также как и для различных версий одной и тойже ОС?
И что там у нас с 2d и 3d графикой для мобил? )

Deleted
( 17.02.11 18:47:28 MSK )

>Понятно, что придется писать на java

можно и на паскале 😀

wxw ★★★★★
( 17.02.11 18:54:01 MSK )
Ответ на: комментарий от Deleted 17.02.11 18:47:28 MSK

> А при написании прог на си? надо будет для каждого устройства производить отдельную компиляцию? также как и для различных версий одной и тойже ОС?

И что там у нас с 2d и 3d графикой для мобил? )

вообще-то лучшие 3D игры как раз и написаны на С и С++ - Dungeon Hunter, NFS и пр., и работают на всех этих платформах, а «графика» пишется банально на OpenGL

aho
( 17.02.11 18:55:42 MSK )

iZEN ★★★★★
( 17.02.11 19:04:40 MSK )

>Понятно, что придется писать на java
вовсе необязательно. Огласите список target плаформ?

JFreeM ★★★☆
( 17.02.11 19:05:53 MSK )
Ответ на: комментарий от JFreeM 17.02.11 19:05:53 MSK

«Огласите список target плаформ? »[br] Все)

Deleted
( 17.02.11 19:06:56 MSK )
Ответ на: комментарий от iZEN 17.02.11 19:04:40 MSK

iZEN спасибо за ссылки, почитаю.

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

Кстати планируемые платформы. эээ. Все, как можно больше.

Deleted
( 17.02.11 19:11:21 MSK )
Ответ на: комментарий от Deleted 17.02.11 19:11:21 MSK

Есть какой-то коммерческий сдк, генерирующий код для нескольких целевых систем. По-моему, единственно правильный подход.

JackyTreehorn ★
( 17.02.11 19:18:54 MSK )
Ответ на: комментарий от Deleted 17.02.11 19:11:21 MSK

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

платформозависимый код будет 100%, но это будет не переписывание, такой код выносится в отдельные функции/классы и реализуется под платформу не затрагивая основной код программы

aho
( 17.02.11 19:18:59 MSK )
Ответ на: комментарий от aho 17.02.11 19:18:59 MSK

Тоесть я смогу написать скажем «ядро программы» на чистом СИ, ну там структуры создать, некоторые функции счёта, логику. а вот платформозависимый код это вообще что? стандартные функции си?

Deleted
( 17.02.11 19:34:32 MSK )
Ответ на: комментарий от Deleted 17.02.11 19:34:32 MSK

> а вот платформозависимый код это вообще что?

работа с железом

aho
( 17.02.11 19:41:46 MSK )
Ответ на: комментарий от Deleted 17.02.11 19:11:21 MSK

>aho а проблем с запуском игр на различных мобилках не будет?

Не слушай aho. Для мобилок пишут только на Java (платформа J2ME). Всякие смартфоны (в своём исчезающем меньшинстве) тоже в массе своей поддерживают исполнение J2ME мидлетов.

Разработка и распространение мидлетов не завязаны на сертификацию, но мидлеты могут быть подписаны разработчиком с использованием доверяемого сертификата и обеспечить, таким образом, детальный доступ к низкоуровневым функциям телефона (например, отправлять SMS/MMS без обязательного запроса разрешения у пользователя).

«Огороженные» платформы, такие как BREW и Symbian, используют собственные закрытые SDK для разработки приложений под смартфоны. А для установки приложений на устройствах пользователей нуждаются в лицензионных отчислениях компании-поставщику средств разработки, разработчики должны купить лицензию/сертификат на выпуск/запуск игр на устройствах пользователей.

iZEN ★★★★★
( 17.02.11 19:45:12 MSK )
Ответ на: комментарий от iZEN 17.02.11 19:45:12 MSK

>> aho а проблем с запуском игр на различных мобилках не будет?

Не слушай aho. Для мобилок пишут только на Java (платформа J2ME)

ты все проспал 🙂 в частности iPhone, Android, WP7, Bada, на которых приложения на J2ME смотрятся более чем убого, конечно можно писать под старые телефоны/смартфоны - но учитывая скорость прогресса, так можно быстро оказаться на обочине

aho
( 17.02.11 19:55:53 MSK )
Ответ на: комментарий от Deleted 17.02.11 19:11:21 MSK

>Кстати планируемые платформы. эээ. Все, как можно больше.

Платформа Java ME помимо профиля (MIDP) и конфигурации (CLDC, CDC) на конкретном устройстве может предоставлять различные дополнительные функции, описываемые JSR-спецификациями.
Вот их полный список: http://www.jcp.org/en/jsr/all
Из этого списка только некоторые JSR привязаны к мобильной платформе Java ME.

На современных кнопочных девайсах реализованы следующие JSR:
• JSR-75 PDA Optional Packages for J2ME™
• JSR-82 Bluetooth Wireless Technology API
• JSR 118 MIDP 2.0
• JSR-120 Wireless Messaging API
• JSR-135 Mobile Media API 1.1
• JSR 139 CLDC 1.1
• JSR-172 J2ME™ Web Services Specification
• JSR-177 Security and Trust Services API for J2ME™
• JSR-180 SIP API for J2ME™
• JSR-184 Mobile 3D Graphics API for J2ME™
• JSR 185 Java™ Technology for the Wireless Industry
• JSR-205 Wireless Messaging API 2.0
• JSR-211 Content Handler API
• JSR-226 Scalable 2D Vector Graphics API for J2ME™
• JSR-229 Payment API
• JSR-234 Advanced Multimedia Supplements
• JSR-238 Mobile Internationalization API
• JSR-239 OpenGL ES
• JSR-248 Mobile Services Architecture
• JSR-256 Mobile Sensor API

Sony-Ericsson:
• Mascot Capsule Micro3D Version 3

• Проприетарный Nokia UI Extension API

Разработку и эмуляцию соответствующих API обеспечивают соответствующие комплекты разработчика на основе Sun J2ME WTK Sony-Ericsson (архив semc_java_me_cldc_sdk_2_5_0_3.zip для Windows скачивается с сайта developer.sonyericsson.com). Nokia и Motorola тоже имеют похожие комплекты разработчика.

Samsung и LG сейчас практически не предоставляют соответствующую поддержку сторонним разработчикам, так как увлечены новыми мобильными платформами.

iZEN ★★★★★
( 17.02.11 20:02:18 MSK )
Ответ на: комментарий от iZEN 17.02.11 20:02:18 MSK

> Samsung и LG сейчас практически не предоставляют соответствующую поддержку

добавь Sony-Ericsson, Motorola, HTC - перешли на Android + WP7, Nokia - WP7, и кто там останется?

aho
( 17.02.11 20:05:38 MSK )
Ответ на: комментарий от aho 17.02.11 19:55:53 MSK

>конечно можно писать под старые телефоны/смартфоны - но учитывая скорость прогресса, так можно быстро оказаться на обочине

Ты невнимательно читаешь вопрос темы и реплику автора «Кстати планируемые платформы. эээ. Все, как можно больше.».
Вопроса «как не оказаться на обочине» не стояло!

iZEN ★★★★★
( 17.02.11 20:06:07 MSK )
Ответ на: комментарий от iZEN 17.02.11 20:06:07 MSK

> Ты невнимательно читаешь вопрос темы и реплику автора «Кстати планируемые платформы. эээ. Все, как можно больше.».

aho
( 17.02.11 20:06:30 MSK )
Ответ на: комментарий от aho 17.02.11 20:05:38 MSK

Остались миллиарды пользователей с кнопочными девайсами без гламурных тачскринов.

iZEN ★★★★★
( 17.02.11 20:07:05 MSK )
Ответ на: комментарий от iZEN 17.02.11 20:07:05 MSK

> Остались миллиарды пользователей с кнопочными девайсами без гламурных тачскринов.

с огромным набором существующих игр/программ, а под тот же WP7 можно успеть отхватить хороший кусок, до и iPhone, Android тоже еще достаточно свободный рынок

aho
( 17.02.11 20:09:17 MSK )
Ответ на: комментарий от iZEN 17.02.11 20:07:05 MSK

Блин, так что мне делать то? )
Хочу сделать игру для мобилок, но знаю тока СИ, выучить java проблем естественно нет, но мне нужно знать, смогу ли я легко делать скажем 2d игры? (Хочу делать именно их. )
При программинге на java подобное вроде не сложно делать? так? А кстати? есть какиенить открытые игры для мобилок? . мне просто посмотреть код интересно.
Ну и добавлю. хочется игру сделать для «новомодных тачскринов»

Deleted
( 17.02.11 20:15:56 MSK )
Ответ на: комментарий от aho 17.02.11 20:09:17 MSK

а под тот же WP7 можно успеть отхватить хороший кусок,

Тут да поле широкое

каждый день в маркете приложения появляются сотнями, так что тут конкуренция сильная, но еще важно угадать мысли хотя пару десятков тыс. отморозков, готовых заплалить за твоё изделие.

Android тоже еще достаточно свободный рынок

да но политика гугла что приложения должны быть бесплатными ставит палки в колёса иногда, да и писать под андроед не так просто как под остальные моб. платформы, ИМХО.

Boy_from_Jungle ★★★★
( 17.02.11 20:21:08 MSK )
Ответ на: комментарий от aho 17.02.11 20:09:17 MSK

Программирование нативных игр и приложений под WP7, iPhone, Symbian^* сопряжено с нишевыми заморочками конкретных платформ и их производителей.

Программирование игр и приложений под Java ME сопряжено только с целевым сегментом и набором задействованных в приложениях API (не все телефоны поддерживают весь набор мобильных JSR-спецификаций). У Sony-Ericsson на сайте разработчиков можно скачать «White Papers» — документ с техническими спецификациями на ту или иную модель телефона. В этом документе перечислены все JSR, которые поддерживаются данной моделью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *