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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация Canvas в мидлете 
:(
    Опции темы
Zamuta
Дата 20.2.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При реализации Canvas, GameCanvas и всё что связанно с Canvas это должно происходить в связке с MIDlet и реализацией трёх его состояний StartApp, destroyApp и pauseApp? или полноценная реализация Canvas может обойтись без MIDleta? просто в разных источниках пишут по разному......


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Dancer
Дата 20.2.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



MIDlet тут абсолютно не причём.
У тебя может быть отдельный класс унаследованный от канвас, который где-то можешь определить в рамках твоего рабочего мидлета, и отрисовать эту канву на дисплее (Display), вот Display ты можешь получить лишь из мидлета, тут уж никуда не денешься.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
nagliyvred
Дата 20.2.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Без унаследования MIDlet не обойтись, т.к. это точка входа/выхода из приложения. Но тут он собственно не причем, канва о нем знать совершенно не обязана, ее вообще может не быть. Как лучше связать Сanvas с мидлетом решает программист.
PM   Вверх
Zamuta
Дата 20.2.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Могу ли я тогда реализовать канвас внутри startApp() {здесь канвас}? NetBeans ругается, что канвас должен работать с мидлетом: Application descriptor does not declare any MIDlet. Direct execution is not allowed.

Это сообщение отредактировал(а) Zamuta - 20.2.2006, 19:32


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Dancer
Дата 21.2.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Canvas - это абстрактный класс, поэтому просто так вот ты с ним работать не сможешь, тебе обязательно нужно определять свой собственный класс, унаследованный от Canvas, в котором будет необходимо переопределить метод paint(Graphics g), так как он является абстрактным в Canvas.

Посмотри в исходниках примеров идущих вместе в WTK как там организуют канву, и используют её в мидлете. Напримет мидлет ManyBalls из Demos

Цитата(Zamuta @ 20.2.2006, 19:21 Найти цитируемый пост)
Могу ли я тогда реализовать канвас внутри startApp() {здесь канвас}?

если честно, то не совсем понял что ты этим хочешь сделать? не мог бы кусок кода показать?
или ты пытаешься класс определить при вызове startApp()? (что то вроде такого startApp() { class myCanvas extentd Canvas{ public void paint(Graphics g) {}} то это бред полнейший. если просто пытаешься сделать new Canvas() то так ды делать не сможешь потому как конструктор для Canvas имеет спецификатор protected.

Давай код, посмотрим.



--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Zamuta
Дата 21.2.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Такое нормально? (я учусь)


Код


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


  

public class MyMenu extends MIDlet {
    public MyMenu(){
    }
   
  private Display display; 
  
class MyCanvasMenu extends Canvas {
      public void paint (Graphics g) {
          int width = g.getClipWidth();
          int height = g.getClipHeight();
          g.setColor(255, 255, 0);
          g.fillRect(0,0, width, height);
                 //здесь русуем наш канвас дальше
          }
      }

   public void startApp() throws MIDletStateChangeException {
        MyCanvasMenu mycanvasmenu = new MyCanvasMenu();
        display = Display.getDisplay(this);
        display.setCurrent(mycanvasmenu);
    }
    
  
  
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional)
    throws MIDletStateChangeException {
    }

}






--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Dancer
Дата 22.2.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



ды вполне нормально, желтым цветом заливаем экран (почему бы и нет).
Но просто на будущее, лучше организовывай каждый класс в своём файлике (принцип Разделяй и влавствуй) очень сильно поможет при разростании проекта!!!!
Добавлено @ 10:12
что на симуляторе, что на мобильнике - получил одинаковую картинку smile
Твой лучший друг и помошник (пока начинаешь, учишься) это симулятор - если там идёт, то пол дела сделано. Хотя в WTK симуляторе есть несколько пренеприятных бажин, с которыми пришлось сталкнуться. На симуляторе работает, так как я предполагал, а когда портировал в телефон получалось чёрте что и с боку бантик. Пришлось долго повозиться с логами на телефоне, и потом нашлась ошика в моём коде. Но на работу приложения на симуляторе это никак не отражалось. (но по первости, тебе главное чтобы всё пучком было в симулторе, далее это уже другой уровень - проблемы портации) smile
Удачи......


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
nagliyvred
Дата 23.2.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Zamuta @ 20.2.2006, 19:21 Найти цитируемый пост)
NetBeans ругается, что канвас должен работать с мидлетом: Application descriptor does not declare any MIDlet. Direct execution is not allowed.

Это значит что в настройках проекта не указан исполнимый класс. Нужно зайти в project properties -> MIDlets и прописать там полный путь к классу который extends MIDlet.
PM   Вверх
Zamuta
Дата 23.2.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Dancer,


Цитата(Dancer @ 22.2.2006, 10:06 Найти цитируемый пост)
Но просто на будущее, лучше организовывай каждый класс в своём файлике (принцип Разделяй и влавствуй) очень сильно поможет при разростании проекта!!!!



Если я буду хранить отдельные классы в отдельных файлах в одном package, между ними будет взаимосвязь? Или это делается как-то по-другому?





--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Dancer
Дата 24.2.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



если все классы в одном пакете, то конечно будет у них взаимосвязь, если в разных, то перед использованием необходимо будет этот пакет импортировать (import package1.package2.* ну в этом духе)
В любой книжке по Java я думаю ты найдёшь информацию о том как работать с пакетами.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Zamuta
Дата 25.2.2006, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помогите разобраться...........


Код

package Test;

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


public class MainGame extends MIDlet implements CommandListener{
    private Command exitMidlet = new Command ("Выход", Command.EXIT, 0);
    private MyGameCanvas mr;
    public void startApp() {
        try{
        mr = new MyGameCanvas();
        mr.start();                        <-- ругается в этом месте "cannot find symbol"
        mr.addCommand(exitMidlet);
        mr.setCommandListener(this);
        Display.getDisplay(this).setCurrent(mr);
        } catch(java.io.IOException zxz) {};
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
        if(mr != null) mr.stop();    <--- И в этом месте та же самая ошибка
    }
    public void commandAction(Command c, Displayable d)
    {
        if (c == exitMidlet)
        {
            destroyApp(false);
            notifyDestroyed();
        }
    }
}



Во втором файле создан MyGameCanvas, с ним всё нормально...........

Это сообщение отредактировал(а) Zamuta - 25.2.2006, 01:36


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Dancer
Дата 26.2.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Цитата(Zamuta @ 25.2.2006, 01:32 Найти цитируемый пост)
Во втором файле создан MyGameCanvas, с ним всё нормально...........

а привести его не хочешь?
можешь не приводить описание метода paint() и ещё каких нибудь больших не сильно значимых методов.
Так как используешь start() то надо полагать, у тебя MyGameCanvas имплементирует интерфейс Runnable (или это просто методы твои такие start, stop) приведи код, будет более понятно.



--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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