2014-07-08 10 views
11

Używam więc książki o nazwie Gry iOS według samouczków od Ray'a Wenderlicha i próbuję wykorzystać część kodu obiektywnego C, który tam jest, aby kontrolować akcelerometr postaci w mojej grze. Zamiast Celu C jednak chcę użyć Swift. Wystąpił problem podczas próby utworzenia var typu GLKVector3, który reprezentuje wektor 3D. Po wpisaniu w:Używanie GLKMath z GLKit w Swift

var raw:GLKVector3 = GLKVector3Make(irrelevant stuff) 

pojawia się następujący błąd:

wykorzystanie modułu GLKVector3 jako typ.

Mam import na szczycie mojej szybkiej pliku do GLKit:

import GLKit 

Wszelkie pomysły jak mogę uzyskać funkcjonalność z plików GLKMath używać w moim programie?

Odpowiedz

8

Swift dodał wsparcie dla związków w wersji 1.2. Pola w importowanych związkach są tylko do odczytu, nawet jeśli są zadeklarowane jako var, ale mogą być przekazywane do iz funkcji C, jeśli to konieczne.

informacje o wydaniu Swift 1.2 oznacza, że ​​pola mogą nie być dostępne na wszystkich, ale nadal są czytelne przez okres co najmniej typów GLKit:

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

Czy to oznacza, że ​​nie mogę w ogóle używać GLKVector3? – DShaar

+3

O ile wiem, nie w Swift, jak jest dzisiaj. Mogą wprowadzić związki zawodowe w nadchodzącej wersji, ale nie widziałem nic na ten temat. [Zgłoś błąd!] (Https://bugreport.apple.com) –

+0

Aby uzyskać możliwe obejście (utwórz funkcję C) zobacz: http://stackoverflow.com/questions/8262004/converting-cgpoint-to-glkvector2 -in-cel-c Pod warunkiem, że odbiornik (framework, biblioteka objc) już implementuje unię. – LearnCocos2D

2

Tutaj sprawdź mój repo: https://github.com/noxytrux/SwiftGeom I rzeczywiście zbudować cała lib dla tego, więc nie jesteś już zmuszany do korzystania z GLKit lub czekania, aż Apple wdroży je w szybkim tempie.

3

Wraz z wydaniem wersji beta Xcode 6.3/Swift 1.2 wczoraj (8 lutego 2015 r.) Możliwe jest teraz korzystanie z GLKit od Swift.

+1

Jakiś pomysł, jak przekazać GLKMatrices w mundurach? Próbuję przekonwertować go na UnsafePointer , bez powodzenia. Chciałabym mieć jakieś wskazówki, jak to było! – Gusutafu

+1

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