2016-06-15 4 views
0

저는 Swift와 Sphero 개발에 익숙하지 않지만 Sphero와의 충돌을 기반으로 게임을하도록 요청 받았습니다. 지금까지 문제없이 구동부를 구현했지만 충돌 문제가 있습니다. 나는 인터넷을 통해 코드 예제와 비슷한 문제를 찾고 있었지만 찾은 모든 것은 JAVA 나 ObjectiveC 같은 다른 언어를 기반으로합니다.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 방법에 접근, 그래서하지 않습니다

Sphero의 공식 페이지에서 제공하는 코드는 다음과 같다 이 코드가 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를 사용하여 구현할 방법을 알고 있습니까? 미리 감사드립니다.

답변

0

이 SDK는 Objective-C로 작성되었습니다. Swift는 Swift에 내장 된 Objective-C 상호 운용성을 통해 작동합니다. 선택한 언어와 관계없이 모든 것이 효과가 있습니다. 응답 관찰자가 누락 된 것 같습니다. 로봇에서 robot.addResponseObserver(self)이라고 말하면 RKResponseObserver 프로토콜을 구현해야합니다.

+0

그건 그렇고,이 일은 나를 미치게 만들었다 ... 정말 고마워! –

관련 문제