2014-06-09 9 views
5

Zaczynałem działać błyskawicznie i próbowałem sprawić, by Świat Fizyki działał.SCNPhysicsWorld Error

Jest to błąd otrzymuję „UNDEFINED symbole dla architektury i386: "_OBJC_CLASS _ $ _ SCNPhysicsWorld" odwołuje od: __TFC3sk218GameViewController11viewDidLoadfS0_FT_T_ w GameViewController.o ld: Symbol (e) nie znaleziono dla architektury i386 brzękiem: error : komenda linker nie powiodła się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie) "

Zakładam, że ma to związek z linkiem lub importowaniem biblioteki, której nie mam, ale dodałem wszystko, co mogłem znaleźć Myślałem, że może to naprawić (znaleźć w innych postach na zestawie gier) Czy ktoś wie, co to może być? Dzięki.

+0

Czy używasz Xcode 6 beta na OS X 10.9? Fizyka to nowa funkcja w Scene Kit na 10.10. – rickster

+0

Ahh ... Tak. Używam xcode beta6 na osxie 10.9 –

+0

Używam jednak symulatora ios 8. Nie sądziłem, że os spowodowałby ten problem, ponieważ oprogramowanie jest dla ios. –

Odpowiedz

8

Występuje tutaj błąd z mostem Obj-c/Swift.

Podczas oczekiwania na rozwiązanie, można obejść ten problem, tworząc tymczasowy most dla siebie:

Dodaj następujące klasy:

PhysWorldBridge.h

#import <Foundation/Foundation.h> 
#import <SceneKit/SceneKit.h>// 

@interface PhysWorldBridge : NSObject 

- (void) physicsWorldSpeed:(SCNScene *) scene withSpeed:(float) speed; 
- (void) physicsGravity:(SCNScene *) scene withGravity:(SCNVector3) gravity; 

@end 

PhysWorldBridge.m

#import "PhysWorldBridge.h" 

@implementation PhysWorldBridge 

- (id) init 
{ 
    if (self = [super init]) 
    {   
    } 
    return self; 
} 

- (void) physicsWorldSpeed:(SCNScene *) scene withSpeed:(float) speed 
{ 
    scene.physicsWorld.speed = speed; 
} 

- (void) physicsGravity:(SCNScene *) scene withGravity:(SCNVector3) gravity 
{ 
    scene.physicsWorld.gravity = gravity; 
} 

@end 

Xcode powinien monitować o utworzenie XXX-Bridging-Header.h po dodaniu pierwszego pliku-c. Niech utworzy ten plik.

Dodaj importu dla klasy do „XXX-pomostowe header.h":

// 
// Use this file to import your target's public headers that you would like to expose to Swift. 
// 

#import "PhysWorldBridge.h" 

Teraz można korzystać z tej (hacky) Most do ustawienia właściwości od SWIFT:

//scene.physicsWorld.speed = 2.0 
// CAN'T USE ABOVE OR LINKER ERROR 


let bridge = PhysWorldBridge(); 
bridge.physicsWorldSpeed(scene, withSpeed: 2.0); 
//This call bridges properly 

//So would the gravity one: 
bridge.physicsGravity(scene, withGravity: SCNVector3Make(0, -90.81, 0)); 
+0

Myślę, że lepiej będzie użyć klasy statycznej dla wszystkich niespójności, w przyszłości, gdy błąd zostanie naprawiony, po prostu zamień linie statyczne z szybkim kodem. – HotJard