2013-04-23 3 views
1

나는 자동차 (UIView)가 Google Maps ios api 위에 놓이는 iOS 용 운전 게임을 만들고 있습니다. 지도에 나타나는 자동차 및 회색 건물과의 충돌을 감지하는 데 문제가 있습니다.Google지도 iOS 레이싱 게임 충돌 감지?

저는 픽셀 색상, 즉 차 바로 앞의 픽셀 색상이 건물 옥상의 색상 (회색)인지 여부를 확인하려고했습니다. iPhones 픽셀 색상에 직접 액세스 할 수 없으므로 Google Maps 스크린 샷 메소드를 사용하여 이미지를 가져 와서 픽셀 색상을 얻습니다. 문제는, 방금 떠난 화면의 스크린 샷을 찍을 수 있다는 것입니다. 나는 mapImage = [GMSScreenshot screenshotOfMainScreen];을 사용하고 있습니다. 나는 또한 창과 화면을 가져 와서 전화를 시도했다. mapImage = [GMSScreenshot screenshotOfScreen:topWindow.screen]; 둘 다 같은 효과가있다.

이 문제의 해결책은 무엇입니까? 이 상황에 대한 충돌을 처리하는 더 좋은 방법을 생각해 볼 수 있습니까? 역 지오 코딩에는 건물 대 길거리를 감지하는 기능이 있습니까? 모든 도움에 감사드립니다!

편집 : 이미지 : 인터페이스 빌더 : 왼쪽 오른쪽 게임 메인 메뉴입니다. 왼쪽 상단의 Ui 이미지보기는 참조 용으로 현재 스크린 샷 이미지로 설정됩니다. 내가 아는이 방법은 꺼져 있었어.

게임 플레이 위에서 볼 수 있듯이 이전 메뉴 만 나타납니다.

내 viewdidLoad 기능 : 이미지를 가져 오는 것과 관련하여별로 다른 점이 없습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    cameraPosition = CLLocationCoordinate2DMake(42.271291, -83.729918); 
    moveDistance = .00055; 

    cA = [UIColor colorWithRed:.937255 green:.921569 blue:.886275 alpha:1]; 

    camera = [GMSCameraPosition cameraWithLatitude:cameraPosition.latitude 
             longitude:cameraPosition.longitude 
               zoom:19 
              bearing:0 
             viewingAngle:0]; 


    mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 0, 480, 300) camera:camera]; 
    mapView_.myLocationEnabled = NO; 

    [self.view addSubview:mapView_]; 

    car_ = [[Car alloc] initWithFrame:CGRectMake(240, 150, 13, 29) withImage:[UIImage imageNamed:@"carA-01.png"]]; 
    [self.view addSubview:car_]; 

    [self.view addSubview:controllerView]; 

    updateClock = [NSTimer scheduledTimerWithTimeInterval:(1/20) 
                target:self 
               selector:@selector(update) 
               userInfo:nil 
                repeats:YES]; 

    crashClock = [NSTimer scheduledTimerWithTimeInterval:1 
                target:self 
               selector:@selector(checkCrash) 
               userInfo:nil 
               repeats:YES]; 

    UIWindow *topWindow = [[UIApplication sharedApplication].windows objectAtIndex:0]; 

    mapImage = [GMSScreenshot screenshotOfScreen:topWindow.screen]; 


    // mapImage = [GMSScreenshot screenshotOfMainScreen]; 
} 
+0

더 많은 코드 (및 스크린 샷)를 표시 할 수 있습니까? 그냥 2 라인을 도울 수 없다. – Raptor

답변

0

업데이트 콜백과 같이 매 프레임마다 (또는 일부 간격으로) 새 스크린 샷을 받고 있습니까?

GMSMapView은 만들거나 변경할 때 즉시 렌더링되지 않습니다. 다음 번에 업데이트 할 때 렌더링됩니다. 따라서 viewDidLoad에서 스크린 샷을 찍을 때 맵보기가 추가 된 시점의 화면 (예 : 초기 메뉴)에 무엇이 있는지 알 수 있습니다.

+0

나는 viewdidload에서 호출하고 있었는데, 화면을 벗어나서 카메라를 바꾼다. 그러나, 나는 그것을 내 업데이트 기능에서 호출하는 것이 매우 느리고 자동차 움직임이 고르지 않게하는 것을 발견했습니다. 보다 구체적으로 자동차 움직임은 updateClock 타이머에 의해 지정되며, 윈도우는 crashTimer에서 업데이트됩니다. 이 초파리를 피할 수있는 방법이 있습니까? 또한 스크린 샷 메서드를 두 번 호출 해 보았지만이 방법도 작동하지 않았습니다. –

+0

지도에서 카메라를 업데이트하면 다음 번 업데이트시 '잠시 후'렌더링됩니다. 약 30fps를 목표로하는 것으로 보입니다. 그래서지도가 렌더링되는 데 약 33ms 정도가 걸릴 것으로 추측됩니다. 카메라를 변경할 때 약간의 지연 후에 새 스크린 샷을 찍도록 타이머를 설정할 수 있습니다. –

+0

그 덕분에, 고마워! 그러나 이제는 스크린 샷이 찍는 이미지가 시계 방향으로 90도 회전 한 것으로 보입니다.이 문제를 해결하는 방법은 무엇입니까? –