2014-07-08 9 views
11

Also verwende ich ein Buch namens iOS-Spiele von Tutorials von Ray Wenderlich und versuchen, einige der dort gefundenen Ziel-C-Code zu verwenden, um die Beschleunigungsmesser Steuerung eines Charakters in meinem Spiel zu arbeiten. Anstelle von Objective-C möchte ich Swift verwenden. Ich stieß auf ein Problem beim Versuch, eine var des Typs GLKVector3 zu erstellen, die einen 3D-Vektor darstellt. Wenn ich eintippen:Verwenden von GLKMath von GLKit in Swift

var raw:GLKVector3 = GLKVector3Make(irrelevant stuff) 

bekomme ich folgende Fehlermeldung:

Verwendung des Moduls GLKVector3 als Typ.

Ich habe einen Import an der Spitze meiner schnellen Datei für GLKit:

import GLKit 

Irgendwelche Ideen, wie ich die Funktionalität von den GLKMath Dateien bekommen können in meinem Programm zu benutzen?

Antwort

8

Swift hat in Version 1.2 die Union-Unterstützung hinzugefügt. Die Felder in importierten Unions sind schreibgeschützt, auch wenn sie mit var deklariert sind, sie können jedoch bei Bedarf an C-Funktionen übergeben werden.

Die Release Notes für Swift 1.2 bedeutet, dass die Felder nicht zugänglich sein, aber sie sind noch lesbar für mindestens die GLKit Typen:

Swift can now partially import C aggregates containing unions, bitfields, SIMD vector types, and other C language features that are not natively supported in Swift. The unsupported fields will not be accessible from Swift, but C and Objective-C APIs that have arguments and return values of these types can be used in Swift. This includes the Foundation NSDecimal type and the GLKit GLKVector and GLKMatrix types, among others.

+1

Bedeutet dies, dass ich GLKVector3 überhaupt nicht verwenden kann? – DShaar

+3

Soweit ich sagen kann, nicht in Swift wie es heute ist. Sie können Gewerkschaften in einer kommenden Version implementieren, aber ich habe nichts davon gesehen. [Fehlerbericht senden!] (Https://bugreport.apple.com) –

+0

Für eine mögliche Problemumgehung (erstellen Sie eine C-Funktion) siehe: http://StackOverflow.com/Questions/8262004/converting-cgpoint-to-glkvector2 -in-objective-c Vorausgesetzt, dass der Empfänger (Framework, Objc-Bibliothek) bereits eine Union implementiert. – LearnCocos2D

2

Hier meine Repo-Check: https://github.com/noxytrux/SwiftGeom i a tatsächlich bauen Dafür musst du nicht mehr GLKit verwenden oder darauf warten, dass Apple es in swift implementiert.

3

Mit der Veröffentlichung der Beta-Version von Xcode 6.3/Swift 1.2 gestern (8. Februar 2015) ist es jetzt möglich, GLKit von Swift zu verwenden.

+1

Gibt es eine Idee, GLKMatrices als Uniformen zu übergeben? Ich versuche, es in einen unsafePointer zu konvertieren, ohne Erfolg. Würde einige Hinweise lieben, sozusagen! – Gusutafu

+1

@Gusutafu 'var viewProj = GLKMatrix4Multiply (...) var pData = uniformBuffer.contents() pData.advancedBy (sizeof (GLKMatrix4) * inflightBufferIndex) let Adresse = withUnsafePointer (& viewProj) {UnsafeMutablePointer ($ 0)} memcpy (pDaten, Adresse, Größevon (GLKMatrix4)) ' – aoakenfo

Verwandte Themen