7.02.2014 / 20:39 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| DominaN, понятное дело, именно так я и делаю, но как теперь достучаться именно до реализованной оболочки?
__________________
let live |
7.02.2014 / 20:54 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| aNNiMON, избавься от явного конструктора и преврати JecpImage в интерерфейс |
7.02.2014 / 21:08 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| DominaN, а как я работать буду с картинками из общего проекта? В общем я сделал так: public class JecpImage implements ImageInterface {
public static ImageInterface imageInterface;
public static JecpImage createImage(String res) throws IOException {
return imageInterface.init(res);
}
public static JecpImage createImage(InputStream is) throws IOException {
return imageInterface.init(is);
}
public int getWidth() { return imageInterface.getWidth(); };
public int getHeight() { return imageInterface.getHeight(); };
}
А потом при запуске связываю с нужным мне классом: JecpImage.imageInterface = new ImageME(); Работает прекрасно, но так только одну картинку можно получить __________________
let live Изменено aNNiMON (7.02 / 21:08) (всего 1 раз) |
7.02.2014 / 21:18 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| aNNiMON, в каком плане только одну картинку?
|
7.02.2014 / 21:24 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| 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 Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| aNNiMON, Ничего не пойму, почему бы не сделать просто три либы со своей реализацией методов?
|
7.02.2014 / 21:35 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Naik, а я что делаю? LibGDX знаешь? Нечто похожее и у меня: одна общая либа и бэкэнды для различных платформ.
__________________
let live Изменено aNNiMON (7.02 / 21:36) (всего 1 раз) |
7.02.2014 / 21:39 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| aNNiMON, Тогда в чем проблема? Подсовываешь нужную либу, в которой «правильный» класс Image и все дела.
При желании можно в основной либе создать интерфейс ImageInterface, а в платформозависимой его использовать. Тогда создание картинки будет выглядеть так: ImageInterface ii = new Image("/ic.png");
Изменено Naik (7.02 / 21:49) (всего 1 раз) |
7.02.2014 / 21:54 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| 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 Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Naik (07.02.2014/21:39) ImageInterface ii = new Image("/ic.png");Всё верно, но Image это уже конкретный класс одного из бэкэндов, мы про бэкэнды ничего не знаем из данного контекста.
__________________
let live |