Was ist UnsafeMutablePointerVoid? Wie ändert man den zugrunde liegenden Speicher?

8

Ich versuche mit SpriteKits SKMutableTexture Klasse, aber ich weiß nicht, wie ich mit UnsafeMutablePointer< Void > arbeiten soll. Ich habe eine vage Idee, dass es ein Zeiger auf eine Folge von Byte-Daten im Speicher ist. Aber wie kann ich es aktualisieren? Wie sieht das eigentlich im Code aus?

Bearbeiten

Hier ist ein grundlegendes Codebeispiel zum Arbeiten. Wie würde ich etwas so einfach wie ein rotes Quadrat auf dem Bildschirm erstellen?

%Vor%     
Bret 08.02.2015, 19:57
quelle

2 Antworten

12

Aus den Dokumenten für SKMutableTexture.modifyPixelDataWithBlock :

  

Es wird angenommen, dass die Texturbytes als dicht gepackte 32bpp, 8bpc (unsigned integer) RGBA Pixeldaten gespeichert werden. Die von Ihnen bereitgestellten Farbkomponenten sollten bereits mit dem Alpha-Wert multipliziert worden sein.

Während also ein void* angegeben wird, liegen die zugrunde liegenden Daten in Form eines Stroms von 4x8 Bits vor.

Sie könnten eine solche Struktur wie folgt manipulieren:

%Vor%     
Airspeed Velocity 08.02.2015, 20:21
quelle
7

UnsafeMutablePointer<Void> ist das Swift-Äquivalent von void* - ein Zeiger auf alles. Sie können auf den zugrunde liegenden Speicher als seine memory -Eigenschaft zugreifen. Wenn Sie wissen, was der zugrunde liegende Typ ist, werden Sie normalerweise zuerst einen Zeiger auf diesen Typ erzwingen. Sie können dann Subskriptionen verwenden, um einen bestimmten "Slot" im Speicher zu erreichen.

Wenn die Daten beispielsweise eine Sequenz von UInt8-Werten sind, könnten Sie sagen:

%Vor%

Sie können nun auf die einzelnen UInt8-Werte als buffer[0] , buffer[1] usw. zugreifen.

    
matt 08.02.2015 20:09
quelle

Tags und Links