SCNPhysicsWorld错误

Che*_*ees 5 xcode scenekit ios8

我一直在搞乱swift并试图让Physicsworld工作.

这是我得到的错误"架构i386的未定义符号:"_ OBJC_CLASS _ $ _ SCNPhysicsWorld",引用自:GameViewController.o中的__TFC3sk218GameViewController11viewDidLoadfS0_FT_T_ ld:找不到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v来查看调用)"

我认为它与链接或导入我不是的库有关,但我已经添加了我认为可以解决的所有内容(在游戏工具包的其他帖子中找到)有谁知道这可能是什么?谢谢.

dav*_*ryn 8

Obj-c/Swift桥有一个错误.

在等待解决方案时,您可以通过为自己创建临时桥来解决此问题:

添加以下类:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

XXX-Bridging-Header.h当您添加第一个objective-c文件时,Xcode应该提示您创建一个.让它创建这个文件.

将类的导入添加到'XXX-Bridging-header.h":

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

#import "PhysWorldBridge.h"
Run Code Online (Sandbox Code Playgroud)

现在你可以使用这个(hacky)桥来设置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));
Run Code Online (Sandbox Code Playgroud)