Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод GameCanvas на дисплей 
:(
    Опции темы
Димончик
Дата 19.1.2011, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 17.11.2010

Репутация: нет
Всего: нет



Всем привет. 

Canvas понятно как выводить, а от GameCanvas - нет... Подскажите пожалуйста!
Нигде не могу найти образец GameCanvas - а, нигде вообще, вот уже 5 чесов сижу и уже прям  - немогу...
В офыцыальной доке SUN - Примеров я тоже не нашол, да мне всего то пару строчек кода нужно где то гнлянуть, не надо там кучу переменных писать или ещо чего-нибудь вообщем... Подскажите, пожалуйста...
Сам  по себе Canvas - был бы отличны, еслибы не то, что обработка клавиш происходит после рисования или наоборот - перед, а мне нужно чтобы можно было опросить клавиши в любую милисекунду. я слишал ето возможно на GameCanvas????


package g;

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.midlet.*;


public class c3d extends MIDlet {
  
    public Display dis;//ссылка на дисплей
   
    public c3d(){

    dis=Display.getDisplay(this);

    }


    public void startApp() {

       gc canvasss=new gc();
        dis.setCurrent(canvasss);
     
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }


  class gc extends GameCanvas {
       public gc() {
        super(true);
     }

            public void peint (Graphics g){
               g.setColor(234,23,106);
               g.drawString("gerger",0,0,g.LEFT|g.TOP);
            repaint();
            }
  }





}



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



Это сообщение отредактировал(а) Димончик - 20.1.2011, 00:01
PM MAIL   Вверх
math64
Дата 20.1.2011, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Примеры есть в самом SDK, например example.pushpuzzle.PushPuzzleCanvas.

PM   Вверх
GenaNa
Дата 23.1.2011, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 29.10.2009

Репутация: нет
Всего: нет



flushGraphics(); вместо paint();

Перед flushGraphics() нужно получить "графику"
Код

Graphics g = getGraphics();


Repaint вызивает метод paint() обычного canvas.
Так что вызывать repaint в paint-e не надо.
В GameCanvas для вывода нарисованого используют flushGraphics();
Хотя можно перекрыть и paint(), для чего его нужно описать отдельно
Код

public void paint(Graphics g){
// функции рисования
}


Кстати, у тебя там peint

Я бы вообще вынес класс gc в отдельный файл gc.java:
Код

import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;

class gc extends GameCanvas implements Runnable{

Graphics g;                  //"графика"
MIDlet midlet;             //управляющий мидлет
Thread thread;            // отдельный поток, в котором все будет исполнятся
boolean isRunning = false; // признак работы потока
boolean isChanged = true; // условие  перерисовки

//конструктор класса
public gc(MIDlet mid, Display display){// в параметрах передаем управляющий мидлет и дисплей
     super(false);
     midlet = mid;    //делаем управляющий мидлет глобальной переменной
     g = getGraphics(); // получаем графику
     setFullScreenMode(true); //полноэкранный режим
     thread = new Thread(this); //создаем поток
     display.setCurrent(this); //выводим самих себя (gc) на дисплей
     thread.start(); //запускаем поток
}

//этот метод выполняется при старте потока
public void run(){
    while(isRunning){//пока верно
       //если рисуем впервые или рисунок нужно перерисовать
      if(isChanged){
          //все рисуется в буфер
          g.setColor(234,23,106);
          g.drawString("gerger",0,0,g.LEFT|g.TOP);
          //буфер копируется на gcanvas
          flushGraphics();
          isChanged = false;//рисунок не нужно перерисовывать
      }
      
       //пробуем остановить поток на 100 милисекунд
       try{
                thread.sleep(100);
       }catch(Exception e){
          //
       }
   }
   // если не isRunning - вызываем завершающий метод управляющего мидлета
   midlet.exit();
}

//обработка нажатий клавиш
public void keyPressed(int keyCode){
    //синхронизируем с нашим потоком
    synchronized(this){
        switch(keyCode){
            //в зависимости от нажатой кнопки выполняем действие
            case -7:
                //если код кнопки -7 сбрасываем признак продолжения потока, см. run()
                isRunning = false;
            break;
        }
        //если нажата любая кнопка, перерисуем экран
        isChanged = true;
    }
}

}


Управляющий мидлет
Код

public class c3d extends MIDlet {
  
  public Display dis;//ссылка на дисплей
   
  public c3d(){

      dis=Display.getDisplay(this);

 }


    public void startApp() {

        gc canvasss=new gc(this, dis);//нашему geme canvas передаем в качестве параметров управляющий мидлет и дисплей
     
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

   //помимо стандартных, напишем обработчик выхода, который будет вызыватся canvasss -oм
   public void exit(){
         destroyApp(false);
         notifyDestroyed();
   }


}


Это сообщение отредактировал(а) GenaNa - 23.1.2011, 13:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.