Main Menu

Car-Example

Started by shadow, January 22, 2011, 03:50:46 AM

Previous topic - Next topic

shadow

Hi,

ich hab auf Basis des Car-Examples ein Spiel geschrieben und wollte nun eine Änderung vornehmen. Und zwar, dass das Spiel sofort mit Hardware-Rendering startet und nicht wie im Original mit Software-Rendering...
Dafür sind jetzt so wie ich das im Beispiel sehe, einige Dinge zu tun bzw. umzustellen.

Ich entnehme der Methode switchOptions() was ich im Rest des Codes ändern muss:

    /**
     * This is for switching settings. Currently, only switching from OpenGL to software and
     * back is supported here. This is done to avoid switching modes while polling the keyboard,
     * because it may have undesired side-effects otherwise.
     */
    private void switchOptions() {
        switch (switchMode) {
            case (SWITCH_RENDERER): {
                isIdle = true;
                if (buffer.usesRenderer(IRenderer.RENDERER_OPENGL)) {
                    keyMapper.destroy();
                    buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
                    buffer.enableRenderer(IRenderer.RENDERER_SOFTWARE, IRenderer.MODE_OPENGL);
                    openGL = false;
                    if (fullscreen) {
                        device.setFullScreenWindow(null);
                    }
                    frame.hide();
                    frame.dispose();
                    initializeFrame();
                } else {
                    frame.hide();
                    buffer.enableRenderer(IRenderer.RENDERER_OPENGL, IRenderer.MODE_OPENGL);
                    buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
                    openGL = true;
                    keyMapper.destroy();
                    keyMapper = new KeyMapper();
                }
                isIdle = false;
                break;
            }
        }
        switchMode = 0;
    }


Als erstes stelle in den Renderer um. An dieser Stelle frage ich mich schon, warum im einen Fall erst disabled und dann enabled wird, im anderen Fall andersherum? Gibts dafür einen bestimmten Grund?

Danach setzte ich den Default-Wert von "private boolean openGL" auf true.

Jetzt startet das Programm mit Hardware-Rendering. Allerdings ist ein zweites Fenster sichtbar. Nur, wenn das aktiv ist, registriert das Programm Tastendrücke. Das umzustellen ist mir nicht gelungen. Wahrscheinlich auch schon deshalb, weil ich "keyMapper.destroy();" nicht verstehe...

Über etwas Licht ins Dunkel würde ich mich seehr freuen.

Vielen Dank!
shadow

EgonOlsen

Die Reihenfogle von enable und disable ist völlig egal. Ich persönlich finde disable-enable logischer, aber das heißt nicht, dass ich das überall so gemacht habe. Das zweite Fenster was du siehst, ist der Frame den der Software-Renderer benutzt. Ich würde, wenn du nur Hardware verwenden willst, den ganzen Kram rauswerfen und einfach den Hardware-Renderer so einschalten, wie es zum Beispiel das HelloWorld-Beispiel tut. Alles andere ist nur unnötig kompliziert.

Der KeyMapper ist ein Weg, um Tastaturabfragen zwischen AWT/Swing und LWJGL zu vereinheitlichen. Je nach Nutzung muss einer der beiden Konstruktoren genommen werden. Steht aber in den JavaDOCs dazu beschrieben.

shadow

Ah ok, alles klar!
Danke!