gpt4 book ai didi

objective-c - 无法在 Swift 中使用 Sphero 碰撞检测?

转载 作者:行者123 更新时间:2023-11-30 13:20:17 25 4
gpt4 key购买 nike

我是 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,我只能找到//Coming Soon!。

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 实现这个吗?预先感谢您。

最佳答案

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

关于objective-c - 无法在 Swift 中使用 Sphero 碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37833069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com