# Mit Java ein Programm programmieren was im Overlay z.B. eines Spiels ist



## IZZO (1. Januar 2014)

Ob und wie kann man ein Programm mit Java programmieren was als Overlay eines Spiels ist. Es gibt ja die Methode 

```
beispiel.setAlwaysOnTop(true);
```

Dabei ist das Fenster aber nur über dem Spiel wenn man es im Fenstermodus oder ohne Rand spielt aber nicht im Vollbildmodus. Wie geht das nun, dass das Programm auch wenn das Spiel im Vollbildmodus ist, über dem Spiel liegt?

Hoffe ihr könnt mir helfen

LG IZZO


----------



## sheel (1. Januar 2014)

Hi

ohne, dass das Spiel da mitmacht, wird das nichts.


----------



## Bratkartoffel (2. Januar 2014)

Hi,

rein über Java geht das glaub ich nicht, da musst du dann schon eine System-nähere Sprache wie C / C++ nehmen. Dazu dann per OpenGL / Direct3D das Element zeichnen.

Grüße,
BK


----------



## Cromon (2. Januar 2014)

Hallo IZZO

Grundsätzlich ist das möglich, aber wie die anderen sagten, du brauchst eine Basis in C++. Habe mal etwas probiert und um folgenden Code auszuführen:


```
import java.awt.*;
import java.awt.image.*;

public class Init {
    native void initEndSceneHook(String className, String methodName);
    native void drawImage(BufferedImage img, long device);

    static BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
    static Init instance;

    static {
        System.loadLibrary("JNIDLL");
    }

    public static void onFrame(long device) {
        instance.drawImage(image, device);
    }

    public static void main() {
        Graphics2D g = (Graphics2D) image.getGraphics();
        g.setColor(Color.CYAN);
        g.setFont(new Font("Consolas", Font.PLAIN, 30));
        g.drawString("Hallo aus Java!", 50, 50);

        instance = new Init();
        instance.initEndSceneHook("Init", "onFrame");
    }
}
```

Habe ich etwa 400 Zeilen in C++ an Code (JNI-Funktionen, Starten der VM, DirectX hooken und zeichnen) gemacht. Das Resultat funktioniert allerdings ganz gut, siehe:



Das ganze ist soweit eigentlich ein guter Ausgangspunkt um dein ganzes Rendering in JAva zu machen und dann nach DX in einem BufferedImage zu übertragen. Du könntest also in einem eigenen Thread mit OpenGL dein Overlay zeichnen in java, entsprechend die beiden Threads (renderthread aus dem Spiel und dein Renderthread) synchronisieren und dann den Backbuffer aus OpenGL als BufferedImage an C++ übergeben. Einfach so ein paar Gedanken 

Viele Grüsse
Cromon


----------

