Есть ли готовые блоки или совместимые программы или вообще IDE понимающие команду из написанной мной программы на подобии draw_poligon(x1,y1,....xn,yn).
Суть в том что я пишу игру основную на физики с векторной графикой. Я уже написал классы объектов таким образом, что они взоимодествуют друг с другом через методы и выдают мне динамические массивы координат точек полигонов . Теперь мне надо как то нарисовать по этим самые полигоны на экране.
Проблема в том что я не понимаю как писать даже простершие графические интерфейсы не говоря уже о векторной графике.
Собственно вопрос есть ли какие то уже готовые модули которым просто достаточно задать 1 функцию draw_poligon(x1,y1,....xn,yn) и все?
Мне кажется странным если каждому программисту приходится писать с нуля всякие коды типо.
import java.awt.*;
import java.applet.*;
public class SimpleApplet extends Applet implements Runnable{
//апплет выводит текст заданным цветом
//далее текст может быть дополнен с клавиатуры
//дополнительно выводится положение мыши в окне апплета
//так же присутствует постоянная анимация вращающегося фрегата
//и фоновая космическая музыка
String text;//текст, который надо вывести
Image offScreen;//собственно дублирующий буфер
Graphics graph;//графический контекст дублирующего буфера
Thread appThread = null;
Image pic[] = new Image[28];//кадры для анимации, расположенные по порядку
int frame = 0;//номер текущего кадра, нужен для анимации
AudioClip soundTrack = null;//звук
public void init(){
MediaTracker tracker = new MediaTracker(this);
this.setBackground(new Color(0x888888));//установлен фоновый цвет = серый 50%
//теперь попробуем считать значения параметров
//заданные апплету при вызове из html-документа
text = getParameter("text");
if(text == null)
text = "Ничего не введено";
//создадим дублирующий буфер
offScreen = createImage(320,200);//создание дублирующего буфера размером 320x200 пикселей
graph = offScreen.getGraphics();//получить графический контекст для него
//загрузим спрайты
for(int i = 0; i < 28; i++){
pic = getImage(getCodeBase(),"resource/fregat" + i + ".gif");
tracker.addImage(pic,i);
try{
tracker.waitForID(i);
}catch(InterruptedException e){}
//следующая строка обязательно нужна для Windows, если загружается несколько изображений
pic.flush();//нормальные операционные системы этого не требуют - впрочем и не ругаются
}
//загрузить космическую музыку
soundTrack = getAudioClip(getCodeBase(), "resource/spacemusic.au");
}
public void start(){
if(appThread == null){
appThread = new Thread(this);
appThread.start();
}
if(soundTrack != null)
soundTrack.loop();//запустить воспроизведение звука
}
public void stop(){
appThread = null;
if(soundTrack != null)
soundTrack.stop();//остановить воспроизведение звука
}
public void run(){
while(appThread != null){
//здесь производим все необходимые действия
if(frame < 27)
frame++;//увеличить номер кадра
else
frame = 0;//обнулить
//всё подсчитали? тогда пора перерисовать изображение
repaint();
try{//начинается часть, которая может вызвать исключительную ситуацию
Thread.sleep(50);//усыпляем поток на 50 миллисекунд
}catch(InterruptedException e) {}//именно так -
// - фактическая обработка исключений нам не нужна, но нужно соблюсти правила
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
Dimension d = this.getSize();//получение размеров игрового окна
graph.clearRect(0, 0, d.width, d.height);//очистка дублирующего буфера
graph.setColor(new Color(255, 255, 255));//задаём цвет
graph.drawString(text, 30, 30);//выводим текст
graph.drawString(""+mouseX+","+mouseY+", key="+mouseKey, 50,50);//и состояние мыши
graph.drawImage(pic[frame],
100 - pic[frame].getWidth(null)/2,//скорректировать центр спрайта
100 - pic[frame].getHeight(null)/2,
this);
g.drawImage(offScreen, 0, 0, this);//поместить изображение на экран
}
int mouseX, mouseY, mouseKey;//координаты и кнопки мыши
public boolean handleEvent(Event event){
//метод обрабатывает события:
// 1) получает символ с клавиатуры
// 2) отслеживает перемещения мыши
if(event.id == Event.KEY_PRESS){//нажата обычная ASCII клавиша
char keyChar = ((char)event.key);//выделить из события введённый символ
text += keyChar;//добавить его к тексту
repaint();//перерисовать изображение апплета
return true;//сигнализировать что сообщение уже обработано
}else if(event.id == Event.MOUSE_MOVE){
mouseX = event.x;//считать координаты события
mouseY = event.y;
repaint();//перерисовать изображение апплета
return true;//сигнализировать что сообщение уже обработано
}else if(event.id == Event.MOUSE_DOWN){
//попытка узнать какая кнопка мыши нажата
//для однокнопочных мышей эмулируется с помощью спецклавиш клавиатуры
mouseKey = 1;//все системы поддерживают однокнопочную мышь
//но в следующих строках мы проверим, не нажата ли
//или не эмулируется ли нажатие иных кнопок
if(event.modifiers == Event.META_MASK) mouseKey = 2;
if(event.modifiers == Event.ALT_MASK) mouseKey = 3;
repaint();//перерисовать изображение апплета
return true;//сигнализировать что сообщение уже обработано
}else if(event.id == Event.MOUSE_UP){
mouseKey = 0;
repaint();//перерисовать изображение апплета
return true;//сигнализировать что сообщение уже обработано
}else
return super.handleEvent(event);//передать событие родителю
}
}
И з этого кода я понял только то что он берет данные расположенные где то на сервере в строках какого то документа, и подумал почему бы не быть уже готовому аплету например который читает из массивы координат буфера и рисует в окне браузера фигурки.
Для мня найти такой код было бы идеальным. мне не пришлось бы разбирается как работает велосипед рискуя всё сделать как я умею левой нагой через правое плечо. В смысле Переделать велосипеду шестерёнку с цепью на передние калесо и изобрести какой нибудь хитроумный способ чтобы она не слетала при поворотах.