2016-06-15 3 views
0

Я новичок в разработке Swift и Sphero, но меня попросили сделать игру на основе столкновений с Sphero. Мне до сих пор удалось реализовать вождение, но у меня проблемы с столкновениями. Я искал примеры кода и подобные проблемы по всему Интернету, но все, что я нашел, основано на других языках, таких как JAVA или ObjectiveC.Невозможно использовать обнаружение столкновения Sphero с Swift?

код, предоставленный официальной странице 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? Спасибо заранее.

ответ

0

Этот SDK написан на Objective-C; Swift работает через совместимость Objective-C, встроенную в Swift. Все должно работать независимо от выбранного вами языка. Похоже, что вам может не хватать наблюдателя ответа. На робота вы вызываете robot.addResponseObserver(self), убедившись, что вы применяете протокол RKResponseObserver.

+0

Вот именно, эта штука сводила меня с ума ... Спасибо вам большое! –