Вниз  JECP
- 7.02.2014 / 20:39
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, понятное дело, именно так я и делаю, но как теперь достучаться именно до реализованной оболочки?
__________________
 let live
- 7.02.2014 / 20:54
DominaN
  Пользователь

DominaN 
Сейчас: Offline
aNNiMON, избавься от явного конструктора и преврати JecpImage в интерерфейс :)
- 7.02.2014 / 21:08
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, а как я работать буду с картинками из общего проекта?

В общем я сделал так:
  1. public class JecpImage implements ImageInterface {
  2.  
  3.     public static ImageInterface imageInterface;
  4.  
  5.     public static JecpImage createImage(String res) throws IOException {
  6.         return imageInterface.init(res);
  7.     }
  8.  
  9.     public static JecpImage createImage(InputStream is) throws IOException {
  10.         return imageInterface.init(is);
  11.     }
  12.  
  13.     public int getWidth() { return imageInterface.getWidth(); };
  14.  
  15.     public int getHeight() { return imageInterface.getHeight(); };
  16.  
  17. }

А потом при запуске связываю с нужным мне классом: JecpImage.imageInterface = new ImageME();

Работает прекрасно, но так только одну картинку можно получить :gg:
__________________
 let live

Изменено aNNiMON (7.02 / 21:08) (всего 1 раз)
- 7.02.2014 / 21:18
DominaN
  Пользователь

DominaN 
Сейчас: Offline
aNNiMON, в каком плане только одну картинку?
- 7.02.2014 / 21:24
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, создаю:
image = JecpImage.createImage("/res/jecp_logo.png");
bg = JecpImage.createImage("/res/bg.png");

Рисую:
g.drawImage(bg, 0, 0);
g.drawImage(image, posX, posY);

Но рисуется в обоих случаях bg, потому что ссылка одна статическая:
public static ImageInterface imageInterface;
__________________
 let live

Изменено aNNiMON (7.02 / 21:29) (всего 1 раз)
- 7.02.2014 / 21:34
Naik
  Пользователь

Naik 
Сейчас: Offline
aNNiMON, Ничего не пойму, почему бы не сделать просто три либы со своей реализацией методов?
- 7.02.2014 / 21:35
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Naik, а я что делаю?
LibGDX знаешь? Нечто похожее и у меня: одна общая либа и бэкэнды для различных платформ.
__________________
 let live

Изменено aNNiMON (7.02 / 21:36) (всего 1 раз)
- 7.02.2014 / 21:39
Naik
  Пользователь

Naik 
Сейчас: Offline
aNNiMON, Тогда в чем проблема? Подсовываешь нужную либу, в которой «правильный» класс Image и все дела.

При желании можно в основной либе создать интерфейс ImageInterface, а в платформозависимой его использовать. Тогда создание картинки будет выглядеть так: ImageInterface ii = new Image("/ic.png");

Изменено Naik (7.02 / 21:49) (всего 1 раз)
- 7.02.2014 / 21:54
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Naik, смотри какая штука:
Есть общий проект - тот в котором мы разрабатываем игру/приложение. Чтоб понятнее было, назовём его Demo-Core.
Demo-Core ничего не знает о бэкэндах (Java ME, Android, Java SE), он работает только с библиотекой JECP.

Есть проект под Java ME. Demo-ME.
Компилируем: компилируется Demo-Core + JECP, компилируется JECP-ME и всё это добавляется к классам проекта Demo-ME.

Есть проект под Android. Demo-Android.
Компилируем: компилируется Demo-Core + JECP, компилируется JECP-Android и всё это добавляется к классам проекта Demo-Android.

Почему именно так, а не вот так:
Есть проект под Java ME в котором мы разрабатываем игру/приложение. Demo-ME.
Компилируем: компилируется Demo-ME, компилируется JECP-ME и всё это собирается.
Есть проект под Android в который мы копируем классы из Java ME проекта. Demo-Android.
Компилируем: компилируется Demo-Android, компилируется JECP-Android и всё это собирается.
В таком случае:
1. Нам постоянно нужно копировать классы между проектами, чтобы скомпилировать под конкретную платформу.
В моей реализации этого делать не надо, так как при сборке классы сами добавляются (Demo-Core это подключаемая библиотека).
2. Нет централизованной библиотеки. То есть, если я хочу создать класс градиентов, который будет использовать setColor и drawLine, мне нужно будет этот класс добавлять ко всем бэкэндам.
В моей реализации мы без проблем создаём класс Gradient и вызываем абстрактные методы setColor, drawLine, которые для каждой платформы реализованы в своей версии класса.
__________________
 let live
- 7.02.2014 / 21:55
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Naik (07.02.2014/21:39) ImageInterface ii = new Image("/ic.png");Всё верно, но Image это уже конкретный класс одного из бэкэндов, мы про бэкэнды ничего не знаем из данного контекста.
__________________
 let live
Наверх  Всего сообщений: 140
Фильтровать сообщения
Поиск по теме
Файлы топика (11)