3.03.2014 / 14:53 | |
Night_Death Пользователь Сейчас: Offline
Имя: Павел Откуда: Гомель Регистрация: 19.12.2010
| Dimon638 (02.03.2014/23:52) Night_Death, всегда было интересно, в каких именно? ))на слабых телефонах при постоянной перерисовке в обычном канвасе события клавиш могут быть попросту пропущены
|
3.03.2014 / 15:59 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Т. е. лучше как? Сделать несколько канвасов или один канвас на всё? Я о том, что если что_то=чему_то то отрисовать_это иначе отрисовать_это
. На счёт перехода от одного канваса к другому: это же не так часто происходит. __________________
Homo homini penis est. Изменено Kalter (3.03 / 15:59) (всего 1 раз) |
3.03.2014 / 17:34 | |
Night_Death Пользователь Сейчас: Offline
Имя: Павел Откуда: Гомель Регистрация: 19.12.2010
| Kalter (03.03.2014/15:59)Т. е. лучше как? Сделать несколько канвасов или один канвас на всё? Я о том, что если что_то=чему_то то отрисовать_это иначе отрисовать_это
.На счёт перехода от одного каесли так делать, то получится громоздкий код, в котором потом черт ногу сломит. Я создавал один главный класс, унаследованный от GameCanvas и интерфейс для событий клавиш. В главном классе объявляем объект listener, который является нашим интерфейсом. Далее создаем отдельные классы для каждого экрана, передавая туда объект главного класса, и реализуем в них методы ранее созданного интерфейса. При необходимости смены экрана просто присваиваем объекту listener в главном классе объект необходимого нам экрана. Могу пример кода привести, если кому надо. |
4.03.2014 / 12:16 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Приведи, пожалуйста)
__________________
Homo homini penis est. |
4.03.2014 / 13:48 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Kalter, можешь создавать любое количество канвасов, тут нет ничего страшного, я в своих играх использовал несколько канвасов- один канвас с заставкой, другой канвас для меню, а третий для игры. Игровой канвас от простого дает возможность рисовать в любом месте класса, когда в простом канвасе можно рисовать только в методе пайнт. Несколько канвасов дают упрощают редактирование кода, делаю программирование модульным.
Изменено samodelkin (4.03 / 13:50) (всего 2 раза) |
4.03.2014 / 14:38 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Мне тоже кажется, что несколько канвасов - ничего страшного. Спасибо за совет.
__________________
Homo homini penis est. |
4.03.2014 / 16:45 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Пост #304524 пример смены отображаемого на дисплее __________________
знает толк Изменено vl@volk (4.03 / 16:47) (всего 1 раз) |
4.03.2014 / 17:18 | |
Night_Death Пользователь Сейчас: Offline
Имя: Павел Откуда: Гомель Регистрация: 19.12.2010
| Kalter (04.03.2014/12:16)Приведи, пожалуйста)Открыть спойлер Закрыть спойлер MainCanvas.java
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
public class MainCanvas extends GameCanvas {
private CanvasListener listener;
public MainCanvas() {
super(false);
setFullScreenMode(true);
}
public void setListener(CanvasListener listener) {
this.listener = listener;
}
public void keyPressed(int keyCode) {
if (listener != null) {
listener.keyPressed(keyCode);
}
}
public void keyReleased(int keyCode) {
if (listener != null) {
listener.keyReleased(keyCode);
}
}
public void keyRepeated(int keyCode) {
if (listener != null) {
listener.keyRepeated(keyCode);
}
}
public void pointerPressed(int x, int y) {
if (listener != null) {
listener.pointerPressed(x, y);
}
}
public void pointerReleased(int x, int y) {
if (listener != null) {
listener.pointerReleased(x, y);
}
}
public void pointerDragged(int x, int y) {
if (listener != null) {
listener.pointerDragged(x, y);
}
}
public void sizeChanged(int newWidth, int newHeight) {
if (listener != null) {
listener.sizeChanged(newWidth, newHeight);
}
}
}
CanvasListener.java
public interface CanvasListener {
public void keyPressed(int keyCode);
public void keyReleased(int keyCode);
public void keyRepeated(int keyCode);
public void pointerPressed(int x, int y);
public void pointerReleased(int x, int y);
public void pointerDragged(int x, int y);
public void sizeChanged(int newWidth, int newHeight);
}
KeyCodeViewer.java
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class KeyCodeViewer implements CanvasListener {
private GameCanvas gc;
private Graphics g;
public KeyCodeViewer(GameCanvas gc) {
this.gc = gc;
g = gc.getGraphics();
}
public void keyPressed(int keyCode) {
g.setColor(0x000000);
g.fillRect(0, 0, gc.getWidth(), gc.getHeight());
g.setColor(0xffffff);
g.drawString("KeyCode: ".concat(Integer.toString(keyCode)), 0, 0, Graphics.TOP | Graphics.LEFT);
gc.flushGraphics();
}
public void pointerPressed(int x, int y) {}
public void keyReleased(int keyCode) {}
public void keyRepeated(int keyCode) {}
public void pointerReleased(int x, int y) {}
public void pointerDragged(int x, int y) {}
public void sizeChanged(int newWidth, int newHeight) {}
}
Создаем нужное количество экранов, взяв за шаблон класс KeyCodeViewer и при необходимости переключаемся между ними методом setListener класса MainCanvas Пример: MainCanvas canvas = new MainCanvas();
Display.getDisplay(this).setCurrent(canvas);
KeyCodeViewer keyCode = new KeyCodeViewer(canvas);
canvas.setListener(keyCode);
Изменено Oak (5.03 / 08:08) (всего 3 раза) |
5.03.2014 / 00:06 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Night_Death, пожалуйста, в следующий раз под спойлер.
|
5.03.2014 / 10:30 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Спасибо.
__________________
Homo homini penis est. |