![](/img/trans.png)
[英]Writing a portable Java application using JOGL and Android OpenGL
[英]Creating a portable opengl engine for swing and android Java based application
我正在使用JOGL
基于Java
的桌面游戏。 但是我正在考虑将游戏的核心部分移植到Android
。
目前,我在1个名为desktop-game
项目中具有与Swing
(UI)相关的代码,并且该项目依赖于另一个名为core-game
项目,该项目具有基本功能,并且在大多数情况下都可移植而无需任何更改。
然而,最值得注意的是, OpenGL
绘图上下文GL2
在desktop
和android
上是不同的,即
desktop = import com.jogamp.opengl.GL2;
android = import android.opengl.GLES20;
有什么办法可以重用相同的core-game
作为新项目的依赖项,比如说具有android
特定UI的android-game
..?
还是我需要创建一个完全独立的项目android-core
来依赖android-game
?
我试图将相同的核心项目重用于基于CI
的构建。
core-game
,不适用于android-game
..
import com.jogamp.opengl.GL2;
public abstract class Shape{
public abstract void draw(GL2 gl2, Vec3 position, float angle);
}
您需要确保core-game
在任何地方都没有对GL2
引用。 这也可能意味着使draw
方法shape
。
一种可能的解决方案是制作一个ShapeDrawer
类,该类不引用GL2
,该类在desktop-game
:
public abstract class ShapeDrawer {
public abstract void drawRectangle(Rectangle r, Vec3 position, float angle);
public abstract void drawCircle(Circle c, Vec3 position, float angle);
}
然后在形状类中使用它:
public abstract class Shape{
public abstract void draw(ShapeDrawer drawer, Vec3 position, float angle);
}
public class Rectangle extends Shape {
... other stuff ...
public void draw(ShapeDrawer drawer, Vec3 position, float angle) {
drawer.drawRectangle(this, position, angle);
}
... other stuff ...
}
public class Circle extends Shape {
... other stuff ...
public void draw(ShapeDrawer drawer, Vec3 position, float angle) {
drawer.drawCircle(this, position, angle);
}
... other stuff ...
}
然后在desktop-game
您可以实现ShapeDrawer
:
public class GL2ShapeDrawer extends ShapeDrawer {
private GL2 gl;
public GL2ShapeDrawer(GL2 gl) {
this.gl = gl;
}
public void drawRectangle(Rectangle r, Vec3 position, float angle) {
... drawing code ...
}
public void drawCircle(Circle c, Vec3 position, float angle) {
... drawing code ...
}
}
这样, core-game
永远不会直接看到GL2
对象。 这确实意味着您需要获得desktop-game
才能将形状抽屉传递给core-game
-例如,如果您具有GameEngine
类,则其构造函数可能应该将ShapeDrawer
作为参数。 当桌面启动器创建GameEngine
,它可以传递新的GL2ShapeDrawer
。
这只是一种可能的解决方案。 将其用作起点(如果需要),但不要将其视为福音。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.