Веб программирование

Несколько полезных вещей в J2ME

 
 

Сегодня я покажу 3 полезные вещи (Работа с сенсором, растягивание/сжатие Image, двойная буфферизация).

1. Работать с сенсором не так и сложно в J2ME, есть 3 метода для обработки этих событий:

protected void pointerPressed(int x, int y){
/*Пользователь нажал пальцем на экран*/
/*x и y - координаты нажатия*/
}
protected void pointerDragged(int x, int y) {
/*Пользователь переместил палец в точку (x,y)*/
}
protected void pointerReleased(int x, int y) {
/*Пользователь убрал палец с экрана*/
}

Они пишутся в графическом (Canvas) классе так же, как и keyPressed(int KeyCode) и keyReleased(int KeyCode)

2. Вот готовый метод для изменения размеров картинки (рядом с ним вспомогательный):

public static Image resize_image(Image image, int i, int j){
int ai[] = new int[image.getWidth() * image.getHeight()];
image.getRGB(ai, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
int ai1[] = reescalaArray(ai, image.getWidth(), image.getHeight(), i, j);
Image image1 = Image.createRGBImage(ai1, i, j, true);
return image1;
}
private static int[] reescalaArray(int ai[], int i, int j, int k, int l){
int ai1[] = new int[k * l];
for(int i1 = 0; i1 < l; i1++){
int j1 = (i1 * j) / l;
for(int k1 = 0; k1 < k; k1++){
int l1 = (k1 * i) / k;
ai1[k * i1 + k1] = ai[i * j1 + l1];
}
}
return ai1;
}

Например есть у нас картинка MyImg с размерами 240х320, а нам надо её сжать до 128х160. для этого мы пишем MyImg = resize_image(MyImg,128,160); Но не забудьте жобавить эти 2 метода в ваш класс

3. Думаю всем надоедает, что изображение на экране телефона при перерисовке огромного количества картинок постоянно мерцает. чтобы это устранить существует двойная буфферизация (увеличивается потребление памяти, но зато игра идёт без мерцания), работает это так:

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

если использовать двойную буфферизацию - то можно ещё рисовать вне графического класса и делать скриншоты экрана.

...
Image screen = Image.createImage(getWidth(),getheight());
/*Картинка с размерами дисплея телефона*/
...
Graphics MyGraphics = screen.getGraphics();
/*Дальше можно рисовать как обычно, но вместо g писать MyGraphics*/
/*Для примера рисуем зелёный четырёхугольник*/
MyGraphics.setColor(0,255,0);
MyGraphics.fillRect(50,50,100,100);
...
public void paint(Graphics g){
g.drawImage(screen,0,0,20);
/*Выводим на экран наше творчество :) */
}

вот метод для захвата части экрана (x,y, ширина, высота):

public static Image screentoimage(int x, int y, int w, int h)
{
int ai[] = new int[w * h];
screen.getRGB(ai, 0, w, x, y, w, h);
Image image = Image.createRGBImage(ai, w, h, false);
return image;
}

Есть вопросы? Спроси на нашем форуме!!
Нет комментариев

Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.