簡體   English   中英

為基於Swing和android Java的應用程序創建一個可移植的opengl引擎

[英]Creating a portable opengl engine for swing and android Java based application

我正在使用JOGL基於Java的桌面游戲。 但是我正在考慮將游戲的核心部分移植到Android

目前,我在1個名為desktop-game項目中具有與Swing (UI)相關的代碼,並且該項目依賴於另一個名為core-game項目,該項目具有基本功能,並且在大多數情況下都可移植而無需任何更改。

然而,最值得注意的是, OpenGL繪圖上下文GL2desktopandroid上是不同的,即

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM