[JAVA] Ein Hinweis zur libGDX Utils-Klasse

In libGDX gibt es mehrere Dienstprogrammklassen. Ist es wirklich praktisch? .. .. Ich möchte es zusammenfassen, weil es sehr viel ist, einschließlich der Umfrage.

Zielversion

1.9.5

Zielpaket

com.balogic.gdx.utils

Vorerst werde ich das Utils-System zusammenfassen.

NumberUtils

Es führt Gleitkomma-bezogene Konvertierungen gemäß IEEE 754 durch. Es liegt in der Nähe eines Alias für die statischen Methoden von Double und Float. Ich habe versucht, es zu berühren, aber es scheint schwierig zu bedienen. Es wird in der Klasse com.badlogic.gdx.graphics.Color verwendet.

Für Details denke ich, dass es am besten ist, sich das Javadoc von Float und Double anzusehen.

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Float.html https://docs.oracle.com/javase/jp/6/api/java/lang/Double.html#doubleToLongBits(double)

TimeUtils

TimeUtils ist eine Utility-Klasse für die grundlegende Zeitmanipulation. Wenn Sie eine allgemeine Zeitoperation sofort implementieren möchten, ist es besser, sie zu implementieren, nachdem Sie die Methode dieser Klasse gesehen haben.



    // System.currentTimeMillis()Gleich wie
    System.out.println("Millisekunde: " + TimeUtils.millis()); // Millisekunde: 1484574498965
            
    //Konvertieren Sie Millisekunden in Nanosekunden
    System.out.println("Konvertieren Sie Millisekunden in Nanosekunden: " + TimeUtils.millisToNanos(TimeUtils.millis())); // Konvertieren Sie Millisekunden in Nanosekunden: 1484574498965000000

    //Konvertieren Sie Nanosekunden in Millisekunden
    System.out.println("Konvertieren Sie Nanosekunden in Millisekunden: " + TimeUtils.nanosToMillis(TimeUtils.millisToNanos(TimeUtils.millis()))); // Konvertieren Sie Nanosekunden in Millisekunden: 1484574498965

    //Verstrichene Zeit vom Streit(Millisekunde)
    System.out.println("2011/12/5 11:Verstrichene Zeit ab 11 (Millisekunden)" + TimeUtils.timeSinceMillis(TimeUtils.nanosToMillis(LocalDateTime.of(2011, 12, 5, 11, 11).getNano()))); // 2011/12/5 11:Verstrichene Zeit ab 11 (Millisekunden)1484574498976

    //Verstrichene Zeit vom Streit(Nano Sekunden)
    System.out.println("2011/12/5 11:Verstrichene Zeit ab 11 (Nanosekunden)" + TimeUtils.timeSinceNanos(LocalDateTime.of(2011, 12, 5, 11, 11).getNano())); // 2011/12/5 11:Verstrichene Zeit ab 11 (Nanosekunden)872694705378791

PropertiesUtils

PropertiesUtils ist ein Util, das die Informationen der Reader-Instanz im Format key = value lädt und in Map konvertiert. Sie können es einfach mit Informationen in die Eigenschaftendatei laden.

hoge.properties


hoge=fuga
piyo=piyo
age=28
    ObjectMap<String, String> map = new ObjectMap<>();
    PropertiesUtils.load(map, new FileReader(Gdx.files.internal("hoge.properties").file()));
    map.forEach(System.out::println);

Ausgabeergebnis


piyo=piyo
hoge=fuga
age=28

ScreenUtils

ScreenUtils ist eine Dienstprogrammklasse, die hauptsächlich Bildpuffer für die Bildverarbeitung verwendet.

Was ist Farmbuffer?

A framebuffer (frame buffer, or sometimes framestore) is a portion of RAM containing a bitmap that is used to refresh a video display from a memory buffer containing a complete frame of data.

https://en.wikipedia.org/wiki/Framebuffer

Wenn Sie es also richtig interpretieren, sollten Sie es als Speicherbereich der Rahmenzeichnungsinformationen betrachten!


    //Byte der Standard-Frame-Puffer[]Rückkehr mit. Die Länge des Arrays ist die Bildschirmbreite* height * 4。
    byte[] bytes = ScreenUtils.getFrameBufferPixels(true);


    //Liest die angegebene Position aus dem Bildspeicher und gibt Pixmap zurück
    int x = 0;
    int y = 0;
    int width = 0;
    int height = 0;
    Pixmap pixmap = ScreenUtils.getFrameBufferPixmap(x, y, width, height);

    //Textur aus Frame Buffer generieren
    TextureRegion region = ScreenUtils.getFrameBufferTexture();

Diese Klasse funktioniert nur mit der libGDX-Engine. Nullpo tritt auf, wenn keine Erfassungsquelle vorhanden ist, da lediglich die laufenden Informationen erfasst werden.

BufferUtils

BufferUtils ist eine Dienstprogrammklasse für die Verarbeitung, die den Pufferbereich verwendet. Die Hauptmethoden sind Kopieren und Transformieren. Überladungen der Kopier- und Transformationsmethoden für verschiedene Pufferdatentypen werden bereitgestellt. Es gibt auch eine Fabrikmethode. (BufferUtils.newByteBuffer usw.)


    //Fabrikmethode
    ByteBuffer src = BufferUtils.newByteBuffer(1024);
    ByteBuffer dest = BufferUtils.newByteBuffer(1024);
            
    //Kopieren
    BufferUtils.copy(src, dest, 1024);

Ich habe es versucht, aber es funktioniert nur mit der libGDX-Engine. Wenn Sie beispielsweise einfach versuchen, es über die Hauptmethode auszuführen, tritt bei BufferUtils.copy ein Fehler auf. Blick auf die Stapelspur java.lang.UnsatisfiedLinkError: com.badlogic.gdx.utils.BufferUtils.copyJni(Ljava/nio/Buffer;ILjava/nio/Buffer;II)V ... anscheinend ...

ThreadUtils

Diese Klasse verfügt derzeit nur über Ertragsmethoden ab 1.9.5 und diese Implementierung Ich glaube nicht, dass es viele Verwendungsszenen gibt, da nur die Ausbeute von java.lang.Thread aufgerufen wird. Vielmehr ist es schwierig, die Nutzungsszene zu beurteilen.

Laut javadoc in java.lang.Thread https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html

public static void yield() Ein Hinweis an den Scheduler, dass der aktuelle Thread bereit ist, die aktuelle Prozessornutzung zu ermitteln. Der Scheduler kann diesen Hinweis ignorieren. Konzessionen sind ein heuristischer Versuch, den relativen Fortschritt zwischen Threads zu verbessern, die normalerweise die CPU überbeanspruchen würden. Wenn Sie es verwenden, sollten Sie auch detaillierte Profile und Benchmarks kombinieren, um sicherzustellen, dass Sie tatsächlich den gewünschten Effekt erzielen.

Es gibt seltene Möglichkeiten, diese Methode anzuwenden. Dies kann zum Debuggen und Testen nützlich sein (es kann nützlich sein, um Fehler aufgrund von Konfliktbedingungen zu reproduzieren). Dies kann auch beim Entwerfen gleichzeitiger Steuerungskomponenten hilfreich sein, z. B. im Paket java.util.concurrent.locks.

Die Yield-Methode scheint einen nativen Aufruf zu tätigen und den Scheduler zu benachrichtigen. 

StreamUtils

StreamUtils ist keine Stream-API, sondern eine Dienstprogrammklasse zum Bearbeiten der Stream-Schnittstelle für Datei-E / A.




    Path tmpFile = Files.createTempFile(Paths.get("").toAbsolutePath(), "tmp", "file");
    tmpFile.toFile().deleteOnExit();
    StreamUtils.copyStream(Gdx.files.internal("hoge.properties").read(), new FileOutputStream(tmpFile.getFileName().toString()));
    InputStream is = Gdx.files.internal("hoge.properties").read();

    //In String konvertieren
    String streamToString = StreamUtils.copyStreamToString(is);
    System.out.println("streamToString" + streamToString);

    //Prozess schließen
    StreamUtils.closeQuietly(is);

closeQuietly ist auch in IOUtils von Apache Commons enthalten. Wenn es sich um Java SE 7 oder höher handelt, ist es nicht sehr aktiv, da es Versuche mit Ressourcen gibt. Vorher ist es jedoch hilfreich, die Beschreibung der redundanten Abschlussverarbeitung zu reduzieren.

Zusammenfassung

Es scheint, dass TimeUtils, PropertiesUtils und StreamUtils sofort verwendet werden können. Davon abgesehen sind die verwendeten Ebenen begrenzt, oder es scheint, dass sie in der Client-Implementierung nicht verwendet werden.

Diesmal habe ich meine Forschung auf XXXUtils beschränkt, aber auf com.balogic.gdx.utils Com.balogic.gdx.utils.async, Auflistungs-APIs, Json, XML-Operationen, Textformatierungs-APIs usw. werden bereitgestellt. Ich denke, ich werde versuchen, sie in einem anderen Artikel zusammenzufassen, wenn ich Lust dazu habe. ..

Recommended Posts

Ein Hinweis zur libGDX Utils-Klasse
Überprüfen Sie die Notizen für die Klasse java.util.Optional
Ein Überprüfungshinweis für die Klasse java.util.Objects
Hinweise zum Umfang
Ein Hinweis zum Seed-Feature von Ruby on Rails
Hinweis zum Pfad von request.getRequestDispatcher
Setzen Sie ein Abzeichen auf das Symbol
Ein Murmeln über die Utility-Klasse
Überprüfen Sie die Notizen für das Paket java.time.temporal
Ein Hinweis zu den Unterschieden zwischen Schnittstellen und abstrakten Klassen in Java
Geben Sie ein Suffix für die Methode an
Ein Hinweis, wenn der Heroku-Befehl nicht mehr verfügbar ist
Geben Sie ein Suffix für Methode 2 heraus
Ein Memo über den Fluss von Rails und Vue
Ein kurzer Hinweis zur Verwendung von jshell mit dem offiziellen Docker-Image des JDK
Mit der Kalenderklasse von Java bleibt man am letzten Tag des Monats ein wenig hängen
Ein Hinweis zum Initialisieren von Feldern im Java-Lernprogramm
[Ruby / Rails] Legen Sie einen eindeutigen (eindeutigen) Wert in der Klasse fest
Eine Übersicht über die Spring Framework Resource-Oberfläche
Informationen zur StringBuilder-Klasse
[Swift 5] Wählen Sie mit der UIDate-Auswahl unter iOS14 ein Datum aus
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Versuchen Sie, mit Helidon einen WebAP-Server auf dem Mikro zu starten
[Hinweis] Über das Fizz_Buzz-Problem (Funktionsweise von Ruby on Rails)
Verwenden Sie unter Ubuntu das leistungsstarke SQL-Entwicklungstool "A5: SQL Mk-2"
Ich möchte dem select-Attribut einen Klassennamen geben