不能用Swift进行Sphero碰撞检测?

时间:2016-06-15 10:38:41

标签: objective-c swift collision sphero-api sphero

我是Swift和Sphero开发的新手,但我被要求根据与Sphero的碰撞进行游戏。 到目前为止,我已经设法实现了驱动部件没有问题,但我遇到了碰撞问题。 我一直在寻找互联网上的代码示例和类似问题,但我发现的所有内容都基于JAVA或ObjectiveC等其他语言。

Sphero官方网页提供的代码如下:

**Enable collision detection**

robot.enableCollisions(true)
robot.sendCommand(RKConfigureCollisionDetectionCommand(forMethod: .Method3, xThreshold: 50, xSpeedThreshold: 30, yThreshold: 200, ySpeedThreshold: 0, postTimeDeadZone: 0.2))

**Handle Async Messages on collision**

func handleAsyncMessage(message: RKAsyncMessage!, forRobot robot: RKRobotBase!) {
    if let collisionMessage = message as? RKCollisionDetectedAsyncData {
    // handleCollisionDetected
    }
}  

我已经在很多方面尝试了这个,但是在执行时它不会发送任何命令甚至访问handleAsyncMessage方法,所以我开始认为这个代码没有为Swift实现。 当我发现碰撞流式方法在ObjectiveC的官方页面中的某个地方实现时,这些疑虑得到了加强,但对于Swift,我只能找到//即将推出!。

Collisions
  [_robot sendCommand:[[RKConfigureCollisionDetectionCommand alloc]
   initForMethod:RKCollisionDetectionMethod3
   xThreshold:50 xSpeedThreshold:30 yThreshold:200 ySpeedThreshold:0 postTimeDeadZone:.2]];

  ...
- (void)handleAsyncMessage:(RKAsyncMessage *)message forRobot:(id<RKRobotBase>)robot {
   if( [message isKindOfClass:[RKCollisionDetectedAsyncData class]]) {

  RKCollisionDetectedAsyncData *collisionAsyncData = (RKCollisionDetectedAsyncData *) message;

    float impactAccelX = [collisionAsyncData impactAcceleration].x;
    float impactAccelY = [collisionAsyncData impactAcceleration].y;
    float impactAccelZ = [collisionAsyncData impactAcceleration].z;

    float impactAxisX = [collisionAsyncData impactAxis].x;
    float impactAxisY = [collisionAsyncData impactAxis].y;

    float impactPowerX = [collisionAsyncData impactPower].x;
    float impactPowerY = [collisionAsyncData impactPower].y;

    float impactSpeed = [collisionAsyncData impactSpeed];
}
}

我应该将语言更改为ObjectiveC还是你们知道使用Swift实现这一点的方法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

此SDK是用Objective-C编写的; Swift通过Swift内置的Objective-C互操作性工作。无论您选择哪种语言,一切都应该有效。看起来你可能会错过响应观察者。在机器人上调用robot.addResponseObserver(self),确保实施RKResponseObserver协议。