MotoFan.Ru — всё для Motorola > Лаборатория > Разработка Java-приложений > Разработка Java-игр

Игровая комната Полная версия
Страницы: 1, 2, 3, 4, 5

 av JenFA

 21.10.2004, 17:50

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

 av Agent 707

 24.10.2004, 8:46

Есть вопрос - как правильнее осуществлять зацикливание процессов в играх на J2ME. Например в Borland Pascal я просто пускаю цикл, внутри которого вызываются все необходимые фукнции, а для выхода сделано определенное условие, например нажатие какой-либо клавиши.
В Delphi так делать не следует, там для этого предпочтительнее использовать таймеры, которые работают тоже циклически, и сами вызывают необходимую функцию через указанные промежутки времени. Разница в том, что в Pascal (для DOS, ессно) задержки по времени (например, необходимые для того, чтобы изображение на экране не моргало, а также чтобы игра шла со скоростью, доступной для восприятия человеком :) ) делаются внутри цикла, а в Delphi - фактически наоборот, тело цикла выполняется по прохождении определенного времени (по событию OnTimer).
А вот как с этим J2ME обстоит? Какие там методы использовать правильнее?

И еще вопрос - что лучше юзать, SunONE Mobile Edition (сейчас качаю, 23 Мб, кому нужен - http://www.yashka.dp.ua/java/files/ffj_me_win32.exe), или же JBuilder 5? Мне самое важное - удобная и не слишком нагруженная лишними функциями среда программирования, в которой было бы удобно программить (подсветка синтаксиса) и собирать готовый .jar без лишних телодвижений, а также удобная работа с эмулятором из Motorola SDK. На выбор у меня как раз JBuilder и SunONE, и что-то я в сторону последнего склоняюсь... Меньше занимает, а я люблю небольшие проги, они как-то удобнее B)

 av JenFA

 24.10.2004, 8:57

Agent 707

В яве лучше потоки (Thread) или таймеры (TimerTask)

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

Вторые - это аналог дельфового OnTimer - Задаешь время следующего выполнения, и по истечению этого времени они вызывают код. Также TimerTask-ам можно задать периодическое выполнение - например, начинай выполнять через 10 миллисекунд и повторяй каждые 100 миллисекунд.

Начсчёт среды - тут как кому больше нравится ;) Мне JBuilder подходит. весит он "немного" - 80 метров ;)

 av Agent 707

 25.10.2004, 5:37

А как обрабатывать нажатия кнопок? С примерами, пжалста.

 av JenFA

 25.10.2004, 9:25

Agent 707

В Canvas есть 3 абстрактных метода - keyPressed, keyReleased, keyRepeated (думаю, понятно, за что они отвечают). Так вот, активный Canvas (тот, который сейчас на экране) при нажатии клавиш вызывает эти методы. Нужно их только реализовать. Например вот так:

protected void keyReleased(int keyCode)
{
if (keyCode == Canvas.KEY_NUM5) doSomething(); // выполняет doSomething(), когда юзер отпустит 5
}

protected void keyPressed(int keyCode)
{
if (keyCode == Canvas.KEY_NUM2) doSomething2(); // Выполняет doSomething2() когда юзер нажмёт 2
}

protected void keyRepeated(int keyCode)
{
if (keyCode == Canvas.KEY_NUM3) doSomething3(); // выполняет doSomething3() пока юзер держит 3
}

 av max.wiz

 25.10.2004, 13:11

А можно проигрывать mp3-шки в играх???
А без использования лицензируемого Мотороловского API (читал о таком на Motocoder'e) ???
И какой MIME-type указывать??? "audio/mpeg"???

 av JenFA

 25.10.2004, 13:28

max.wiz

Вот так об этом пишет моторола:

The data must be in a sound format that is supported by the device. Though additional formats may be supported, all devices must support some format yet to be determined.

Понимай как знаешь... bigsmile;

 av max.wiz

 26.10.2004, 12:59

dete-что???

 av JenFA

 26.10.2004, 15:07

max.wiz

По русски:

Данные должны быть в аудио формате, поддерживаемым устройством. Несмотря на то, что могут поддерживатся дополнительные форматы, все устройства должны поддерживать один формат, который будет определён в будущем.

 av Agent 707

 27.10.2004, 10:57

Начал работу над игрой... Не, чесслово, тот, кто придумал Java точно был ушибленным на всю голову! Кем это надо быть, чтобы придумать ТАКУЮ реализацию функций языка?! Нда... Не, ну насколько удобен и прост C или скажем PHP! Но Java, вроде и родсвенный язык, но ТАКОГО я себе даже представить не мог... Когда разбирался, разве что матом не ругал разработчиков.
Ладно, более-менее понял принципы, уже знаю, как нарисую дорогу, как наложу картинки с машиной и другими фичами.
Вопрос - как просто приостановить выполнение программы до нажатия любой кнопки?

 av Agent 707

 27.10.2004, 18:28

Есть вопросы:
1. Делаю обработку кнопок, как написано, т.е. посредством keyReleased(int keyCode), но прога все равно не реагирует на нажатия. Делаю просто - в класс MotoDrag (в нем вся программа и находится) добавляю описание метода keyReleased(int keyCode), т.е. как ты написал - я просто скопировал в программу и в нужном месте вставил вызов необходимых операторов. Все равно - ноль эмоций.
2. Как убрать внизу экрана подписи к горячим клавишам? Вернее, как сделать, чтобы эти подписи в начале игры исчезали с экрана, и появлялись например только при нажатии паузы.
3. Я уже сделал прорисовку дороги, но теперь нужно ее залить, так что как заливать не указанное в координатах пространство, а замкнутые пространтсва? Например рисую я прямоугольник белым цветом по черному, а потом заливаю каким-либо методом, указывая в качестве параметра цвет заливки и цвет, который ограничивает область заливки, т.е. белый, а также координаты внутри нарисованного прямоугольника - и он его заливает. В Delphi для этого юзается Canvas.FloodFIll();.
4. Как выводить на экран надписи в графическом режиме (чтобы написать на экране скорость, время и т.п.)?

 av max.wiz

 27.10.2004, 20:15

JenFA
Цитата
По русски:
Данные должны быть в аудио формате, поддерживаемым устройством. Несмотря на то, что могут поддерживатся дополнительные форматы, все устройства должны поддерживать один формат, который будет определён в будущем.


Поюзал парочку форматов, поддерживаются следующие:
audio/amr - AMR файлы - без проблем
audio/midi - те же дела
audio/wav - те же дела
audio/mp3 - MPEG-I layer 3 - ошибок не выдаёт (как впрочем и звука тоже нету huh.gif )

mpeg4 не пробовал, т.к. не идёт у меня видео по телу... zootaz;

 av max.wiz

 27.10.2004, 20:23

Цитата
1. Делаю обработку кнопок, как написано, т.е. посредством keyReleased(int keyCode), но прога все равно не реагирует на нажатия.

keyReleased() работает только для текущего отображаемого контекста.
Цитата
2. Как убрать внизу экрана подписи к горячим клавишам? Вернее, как сделать, чтобы эти подписи в начале игры исчезали с экрана, и появлялись например только при нажатии паузы.

addCommand(); removeCommand() - подробнее в Samples & JDK.
Цитата
3. Я уже сделал прорисовку дороги...

К сожалению это не Дельфа :( (сам на ней/нём/них пишу DCOM-SQL-Oracle)
Цитата
4. Как выводить на экран надписи в графическом режиме (чтобы написать на экране скорость, время и т.п.)?

Дык экран уже в графическом режиме. Вот кусок кода:
// BoomText = "Текст ****** !!!"

protected void paint(Graphics g) {
/** @todo Add paint codes */
g.setColor(0x080C0F0); // "Sky" background
g.fillRect(0,0,width,height);
if (timer == null) {return;};

if (BoomTime-->0) {
Font fnt = g.getFont();
Font tmpfnt = fnt.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD | Font.STYLE_UNDERLINED,Font.SIZE_LARGE);
g.setFont(tmpfnt);
int xx = tmpfnt.stringWidth(BoomText)+2;
int yy = tmpfnt.getHeight()+2;
g.setColor(0x0FFFFFF);
g.fillRect(0,0,xx,yy);
g.setColor(0);
g.drawRect(0,0,xx,yy);
g.setColor(0x0FF0000);
g.drawString(BoomText,1,1,Graphics.TOP | Graphics.LEFT);
}
/// ... типа остальной код
}

 av max.wiz

 27.10.2004, 20:34

Вот моя последняя демка. Только для ознакомительных целей. Поюзаны:
1) Вибра blink.gif ;
2) Графика (Canvas);
3) Фоновое Аудио (можно было-б красивее сделать unsure.gif );
4) Вывод текста на экран;
5) Потоки (Threads);
6) Управление клавиатурой (заточено под V300/MIDP2.0 ph34r.gif ).

Control: Up, Down, Left, Right, Fire - всё... Sorry за BoomText - типа надо будет воткнуть пикчер...

Название демки беспонтовое - сам знаю blink.gif
Заточку под MIDP2.0 легко перевести на 1.0 (вибра+клава).
Тестить только под Мотороловский эмулятор !!!

 av Agent 707

 28.10.2004, 6:29

max.wiz
Насчет заливки снова - так что, никак нельзя так вот залить? Это оч-чень плохо... :( Придется как-то заморачиваться...
Просьба ко всем программерам - найти выход из положения! Хотя в принципе идея есть, но это та-а-ак геморно будет сделать... И слишком много понадобится ресурсов телефона для того, чтобы ТАКОЕ прорисовать...

 av JenFA

 28.10.2004, 6:57

Agent 707

Никак низя... я вот тоже думаю... Вот книжку нашёл, там люди предлагают заливку по горизонтальным линиям (представляю, сколько это на компе времени займёт при 1024х768 :D, но для телефона может подойти... ) и триангуляцию...

 av JenFA

 28.10.2004, 7:09

Agent 707

Вот. Сяшная сырца рисования залитых многоугольников

 av Agent 707

 28.10.2004, 13:52

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

 av max.wiz

 28.10.2004, 17:27

Цитата
Вот. Сяшная сырца рисования залитых многоугольников

Чё-то много кода :o
C++ конечно рулит и работает быстро, но на Яве тормозить не будет??? Типа, Java - не компилит EXE, а транслирует в байт-код - типа интерпретатора получается при работе аплета, вспоминается BASIC. rolleyes.gif

 av Agent 707

 28.10.2004, 19:10

max.wiz
Вот и я так подумал... Блин, кто напишет на яве нормальный код для решения этой задачи? Нужно очень!
Не, ну неужели такой функции нету в J2ME?...
Страницы: 1, 2, 3, 4, 5

Полная версия:


MotoFan.ru (©) 2024    Слушать Radio