2016-03-21 9 views
1

Ich habe ein Problem, das ich durch das Testen meines Spiels, mit LibGDX auf meinem MacBook Pro Laptop (OS X el capitan) gemacht habe. Ich habe das Problem auf meinem Windows-PC nicht erlebt.libgdx Probleme mit Make-Maus wieder nach Sekunden der Inaktivität

Das Problem

Mein Problem ist, dass ich einige Code gemacht haben, die mit der Maus Versteck nach 2 Sekunden Inaktivität macht, und wenn die Maus wieder gezogen wird, dann sollte es wieder, bis es nicht mehr bewegt, und nach 2 Sekunden Inaktivität sollte es sich wieder verstecken. Das funktioniert gut, wenn Sie auf einem Windows PC spielen, aber wenn Sie mein Macbook benutzen, funktioniert es nicht richtig, denn nachdem die Maus ausgeblendet wurde (nach 2 Sekunden Inaktivität), wird sie nicht mehr angezeigt.

Ich verwende die Methode setCursorCatched(true), aus der Input Klasse, um die Maus zu verstecken, und die gleiche Methode erneut, nur mit einer falschen Eingabe, um es wieder erscheinen zu lassen. Um zu überprüfen, ob die Maus relativ zu ihrer letzten bekannten Position bewegt wurde, verwende ich die Methoden getDeltaX() und getDeltaY(). Meine eigene Methode, Inaktivität zu überprüfen, sieht so aus.

/* Time for checking mouse inactivity */ 
private float lastTimeMouseMoved = 0f; 
private float elapsedTimeOfInactivity = 0f; 

/** 
* Check for mouse inactivity. If mouse is inactive for XX seconds or more, then hide it. 
* If the mouse is moved show it, and then hide it again after XX seconds of inactivity. 
* 
* @param deltaTime the elapsed time between each frame. 
* @param secondsInactive the time of inactivity in seconds 
*/ 
private void hideMouseAfterInactivity(float deltaTime, float secondsInactive) { 
    /* If mouse has been moved */ 
    if (Gdx.input.getDeltaX() != 0 || Gdx.input.getDeltaY() != 0) { 
     /* Show the mouse cursor */ 
     Gdx.input.setCursorCatched(false); 

     /* Keep track of the last known time which the mouse was moved. */ 
     lastTimeMouseMoved = deltaTime; 
     elapsedTimeOfInactivity = lastTimeMouseMoved; 
    } else { 
     /* check if the time of inactivity is XX seconds or more */ 
     if (elapsedTimeOfInactivity >= lastTimeMouseMoved + secondsInactive) { 
      /* Hide the mouse cursor */ 
      Gdx.input.setCursorCatched(true); 
     } else { 
      /* update the elapsed time of inactivity */ 
      elapsedTimeOfInactivity += deltaTime; 
     } 
    } 
} 

Ich hoffe, jemand kann mir sagen, was falsch ist ... Ich habe auch ein Problem mit der Maus bekommen, zu zeigen, wenn das Spiel im Vollbildmodus spielen, nachdem ich die setCursorCatched(true) verwendet. Danke im Voraus.

Antwort

0

Obwohl es nicht die beste Lösung für das Problem ist, macht es den Job. Was ich getan habe, war ein transparentes Bild mit 1x1 Pixel zu erstellen, und anstatt die Methode setCursorCatched(boolean catched) zu verwenden, um die Maus sichtbar und unsichtbar zu machen, habe ich die folgende Methode in meiner Hauptspielklasse erstellt, damit ich sie in allen anderen Spielen aufrufen kann Bildschirme.

//Remember to dispose these on application exit. 
private Pixmap normalMouseCursor = new Pixmap(Gdx.files.internal("normal-cursor.png")); 
private Pixmap transparentMouseCursor = new Pixmap(Gdx.files.internal("transparent-cursor.png")); 

/** 
* Set the mouse cursor to either the normal cursor image or a transparent one if hidden. 
* 
* @param shouldHide true if the mouse should be invisble 
*/ 
public void setMouseCursor(boolean shouldHide) { 
    if (shouldHide) { 
     Gdx.graphics.setCursor(Gdx.graphics.newCursor(transparentMouseCursor, 0, 0)); 
     Gdx.app.debug(TAG, "Mouse Cursor is invisible"); 
    } else { 
     Gdx.graphics.setCursor(Gdx.graphics.newCursor(normalMouseCursor, 0, 0)); 
     Gdx.app.debug(TAG, "Mouse Cursor is visible"); 
    } 
} 

Das einzige Problem dabei ist, dass sich der Cursor noch auf Objekte im Spiel klicken können, obwohl es unsichtbar ist. Ich denke, eine Lösung für dieses Problem besteht darin, ein Flag zu setzen, das gesetzt und verwendet wird, um festzustellen, ob der Mauszeiger unsichtbar ist oder nicht.

Verwandte Themen