Java 如何为2d游戏引擎api从外部未知类绘制
我正在尝试为我目前正在编写的2D游戏引擎制作API。我在包外有一个加载器类,我希望有一个jpanel,或者能够使用包外的加载器类和调用引擎来添加jpanel,这样我就可以在API内的加载器类上绘制,这样人们就可以简单地编写而不需要源代码 这是我的发动机级和装载机级Java 如何为2d游戏引擎api从外部未知类绘制,java,eclipse,swing,2d,paint,Java,Eclipse,Swing,2d,Paint,我正在尝试为我目前正在编写的2D游戏引擎制作API。我在包外有一个加载器类,我希望有一个jpanel,或者能够使用包外的加载器类和调用引擎来添加jpanel,这样我就可以在API内的加载器类上绘制,这样人们就可以简单地编写而不需要源代码 这是我的发动机级和装载机级 import java.awt.Graphics; import javax.swing.JPanel; import com.embah.flatbox.Engine; public class loader { pr
import java.awt.Graphics;
import javax.swing.JPanel;
import com.embah.flatbox.Engine;
public class loader {
private Engine engine;
private pane pain = new pane();
public loader(){
engine = new Engine("Testing Grounds", 500, 350);
engine.add(pain);
engine.revalidate();
engine.repaint();
}
public static void main(String[] args){
new loader();
}
}
class pane extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawString("Hello worl222d!", 60, 40);
}
}
还有我的引擎课
package com.embah.flatbox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Engine extends JFrame{
private Render render;
public Engine(String title, int width, int height){
render = new Render();
setSize(width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(title);
add(render);
setVisible(true);
}
public void addComp(JPanel pane){
this.add(pane);
}
public void repaintEngine(){
this.repaint();
}
public void setTitleFrame(String title){
setTitle(title);
}
public void setSizeFrame(int width, int height){
this.setSize(width, height);
}
public void setVisibleFrame(boolean visible){
setVisible(visible);
}
public String getTitleFrame(){
return getTitle();
}
public int[] getSizes(){
int[] size = new int[2];
size[0] = (int) getSize().getWidth();
size[1] = (int) getSize().getHeight();
return size;
}
public boolean isVisibleFrame(){
return isVisible();
}
}
Render类是一个JPanel,在用户使用它之前我一直在使用它,我现在只是使用它进行测试,一旦我知道如何从外部位置绘制,我将删除它
感谢您的帮助根据评论,实际目标似乎可以通过一个相对简单的模式来实现,该模式经常以各种形式用于完成此任务。希望,我没有忽略某些东西,但是如果您只想给您的库的用户执行自定义渲染的可能性,您可以考虑FLLWIN:
class PaintPanel extends JPanel {
private List<Painter> painters = new ArrayList<Painter>();
void addPainter(Painter painter) {
painters.add(painter);
}
void removePainter(Painter painter) {
painters.remove(painter);
}
@Override
protected void paintComponent(Graphics gr) {
super.paintComponent(gr);
Graphics2D g = (Graphics2D)gr;
for (Painter painter : painters) {
painter.paint(g, getWidth(), getHeight());
}
}
}
interface Painter {
void paint(Graphics2D g, int width, int height);
}
当然,这只是一个基本的草图。为了在实际的引擎中应用这样的概念,我们必须考虑更多的方面。例如:是否可以定义画家应该执行的顺序?是否应为多个层配备不同的油漆工,例如前景/背景油漆工?还应考虑封装在图形2d中的状态的详细信息。。。。但是,为了将组件(即JPanel)与客户端通过Painter接口的实现执行和提供的实际绘制操作分离开来,这可能是第一步 我不太清楚。是否允许用户将自己的组件添加到引擎中?或者你想让他自己对属于JPanel的图形对象进行绘制操作吗?最终的希望是让他们自己进行绘制操作。我现在只是把面板当作一个图形支架,我想,我不太知道如何画多个图形对象。-谢谢,汉克斯,我会处理这个问题,看看如何使它在我的项目中发挥作用
PaintPanel paintPanel = new PaintPanel();
...
paintPanel.add(new MyCustomPainter());
// Where
class MyCustomPainter implements Painter {
@Override
public void paint(Graphics2D g, int width, int height) {
// Perform your painting operations here
g.setColor(Color.RED);
g.drawLine(0,0,width,height);
....
}
}