In libGDX gibt es mehrere Dienstprogrammklassen. Ist es wirklich praktisch? .. .. Ich möchte es zusammenfassen, weil es sehr viel ist, einschließlich der Umfrage.
1.9.5
com.balogic.gdx.utils
Vorerst werde ich das Utils-System zusammenfassen.
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 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 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 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 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 ...
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 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.
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