| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
J2ME - Создание двумерных игр при помощи Game API
В этой статье
Пакет MIDP 2.0 содержит Game API, упрощающий создание двумерных игр. Этот API
является компактным и состоит всего из пяти классов в пакете
Построение цикла игры при помощи GameCanvas
public void MicroTankCanvas
extends Canvas
implements Runnable {
public void run() {
while (true) {
// Обновить состояние игры.
repaint();
// Задержка на один шаг времени.
}
}
public void paint(Graphics g) {
// Код прорисовки.
}
protected void keyPressed(int keyCode) {
// Реакция на нажатия клавиш.
}
}
Это не совсем удачная схема. Метод Проблема заключается в том, что все работает в различных потоках и код игры
распределяется по трем различным методам. При вызове в основном цикле анимации в
Типичный цикл игры с использованием public void MicroTankCanvas
extends GameCanvas
implements Runnable {
public void run() {
Graphics g = getGraphics();
while (true) {
// Обновить состояние игры.
int keyState = getKeyStates();
// Реакция на нажатия клавиш.
// Код прорисовки.
flushGraphics();
// Задержка на один шаг времени.
}
}
}
В следующем примере демонстрируется основной цикл игровой программы. Она
показывает вращающийся символ import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class SimpleGameCanvas
extends GameCanvas
implements Runnable {
private boolean mTrucking;
private long mFrameDelay;
private int mX, mY;
private int mState;
public SimpleGameCanvas() {
super(true);
mX = getWidth() / 2;
mY = getHeight() / 2;
mState = 0;
mFrameDelay = 20;
}
public void start() {
mTrucking = true;
Thread t = new Thread(this);
t.start();
}
public void stop() { mTrucking = false; }
public void run() {
Graphics g = getGraphics();
while (mTrucking == true) {
tick();
input();
render(g);
try { Thread.sleep(mFrameDelay); }
catch (InterruptedException ie) {}
}
}
private void tick() {
mState = (mState + 1) % 20;
}
private void input() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0)
mX = Math.max(0, mX - 1);
if ((keyStates & RIGHT_PRESSED) != 0)
mX = Math.min(getWidth(), mX + 1);
if ((keyStates & UP_PRESSED) != 0)
mY = Math.max(0, mY - 1);
if ((keyStates & DOWN_PRESSED) != 0)
mY = Math.min(getHeight(), mY + 1);
}
private void render(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x0000ff);
g.drawLine(mX, mY, mX - 10 + mState, mY - 10);
g.drawLine(mX, mY, mX + 10, mY - 10 + mState);
g.drawLine(mX, mY, mX + 10 - mState, mY + 10);
g.drawLine(mX, mY, mX - 10, mY + 10 - mState);
flushGraphics();
}
}
Исходный код примера в данной статье содержит мидлет, который использует эту
канву. Попробуйте запустить
Игровые сцены похожи на луковицуТиповая двумерная игра состоит из фонового изображения и нескольких анимированных персонажей. И хотя вы можете нарисовать подобную сцену самостоятельно, Game API предоставляет вам возможность построения сцен при помощи уровней. Вы можете создать на одном уровне фон города, а на другом уровне - автомобиль. Помещение уровня с автомобилем поверх уровня с фоном формирует полную сцену. Использование автомобиля на отдельном уровне облегчает манипулирование им независимо от фона и от любых других уровней сцены. Game API обеспечивает гибкую поддержку уровней при помощи четырех классов:
Использование TiledLayerКласс
Это изображение может быть разделено на 12 элементов размером 16 х 16
пикселей. Класс
Этого достаточно для создания Image image = Image.createImage("/board.png");
TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);
В данном примере новый объект Создание сцены при помощи этих элементов является простой задачей. Для
присвоения элемента какой-либо ячейке вызовите Следующий фрагмент демонстрирует один из способов заполнения private TiledLayer createBoard() {
Image image = null;
try { image = Image.createImage("/board.png"); }
catch (IOException ioe) { return null; }
TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);
int[] map = {
1, 1, 1, 1, 11, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 7, 1, 0, 0, 0, 0, 0,
1, 1, 1, 1, 6, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 7, 11, 0,
0, 0, 0, 0, 0, 0, 7, 6, 0, 0,
0, 0, 0, 0, 0, 7, 6, 0, 0, 0
};
for (int i = 0; i < map.length; i++) {
int column = i % 10;
int row = (i - column) / 10;
tiledLayer.setCell(column, row, map[i]);
}
return tiledLayer;
}
Для отображения объекта
Использование спрайтов для анимации персонажаДругим конкретным объектом Все, что вам необходимо для создания объекта private MicroTankSprite createTank() {
Image image = null;
try { image = Image.createImage("/tank.png"); }
catch (IOException ioe) { return null; }
return new MicroTankSprite(image, 32, 32);
}
Каждый фрейм исходного изображения имеет номер, начинающийся с нуля и выше.
(Не путайтесь! Помните, что номера элементов изображения начинаются с 1.) Объект
Для перехода к следующему или предыдущему фрейму в последовательности фреймов
используются методы Для указания отличной от принятой по умолчанию последовательности фреймов,
передайте последовательность в виде массива целых чисел в метод Есть возможность перейти к определенному элементу текущей последовательности
фреймов при помощи вызова метода Изменения фрейма станут видимыми только при следующей прорисовке объекта
Объект // Sprite sprite = ... sprite.setTransform(Sprite.TRANS_MIRROR_ROT90); Трансформации действуют так, чтобы опорный пиксель объекта Вы можете изменить месторасположение опорного пикселя при помощи метода И, наконец, класс Пример muTankПример
muTank демонстрирует использование объектов
Важнейшими классами являются
Метод Синхронизация цикла игры является более сложной, чем в предыдущем примере
РезюмеGame API пакета MIDP 2.0 предоставляет среду, упрощающую разработку двумерных
игр. Во-первых, класс Об авторе: Jonathan Knudsen [e-mail] [домашняя страница] является автором нескольких книг, в том числе "Беспроводная Java, второе издание", "Неофициальное руководство по роботам LEGO MINDSTORMS", "Изучение Java, второе издание" и "2D-графика в Java". Джонатан написал много статей о Java и роботах Lego, в том числе статьи для JavaWorld, EXE, NZZ Folio и O'Reilly Network. Джонатан имеет степень Принстонского университета по машиностроению. Рубрика: Java2ME
HTML 5: пять вещей вызывающих особый интер....
HTML 5 — это грядущее обновление гипертекстового языка разметки, основного способа создания контента для размещения его во всемирной паутине. Разработка HTML остановилась в 1999 году, на версии HTML 4.01 и с тех пор web-содержимое изменилось так, что текущие спецификации HTML перестали соответствовать сегодняшним требованиям. HTML 5 нацелен на то, чтобы увеличить функциональную совместимость HTML и соответствовать растущим требованиям разнообразного и смешанного web-контента. HTML 5 так же нацелен на устранение недостатков четвертой версии. В этой статье мы взглянем на 5 новых интересных вещей в HTML 5.
Подробнее... |
Рубрика: Html
| Добавлено: 22.12.2008
asp.net: ListView с разных сторон.
Элемент управления ListView был представлен в .Net Framework 3.5 как замена устаревшему GridView. Новый элемент имеет более расширенный функционал, чем его предшественник, но в тоже время лишен некоторых внутренних механизмов, что впрочем целиком следствие из расширенной универсальности ListView. Среди отличий ListView и GridView можно назвать и гибкую настройку разметки, что позволяет выводить данные не только в табличном виде, но и вообще в любом каком пожелает программист. Благодаря шаблонам ItemTemplate, EditItemTemplate, InsertItemTeplate можно настроить внешний вид при любом из состояний ListView: редактировании или выборе элемента.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Создание кросс-таб отчета в Stimulsoft Rep....
Компания Стимулсофт предоставляет для разработчиков мощный набор инструментов для создания отчетов для Microsoft Visual Studio .Net 2005 и 2008; эти инструменты доступны как для Windows Forms, так и для Web Forms. Это генератор отчетов Stimulsoft Reports.Net. Генератор отчетов Stimulsoft Reports.Net имеет ряд особенностей: простая работа с дизайнером отчетов, полная поддержка экспорта в PDF, Word, Excel и многие другие форматы. Crystal Report и Microsoft Reporting Service – очень хорошие программные продукты для повседневной работы, но, если Вам необходимо создать отчеты с поддержкой кросс-табов, drill down, Ajax, штрих-кодов и возможностью подключения одновременно более одного источника данных, то Stimulsoft Reports.Net поможет Вам сэкономить массу времени. Также, данный генератор отчетов позволяет пользователям создавать свои собственные отчеты любой сложности. И все эти особенности делают Stimulsoft Reports.Net хорошим выбором в сфере программных продуктов для Business Intelligence.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|