2013-04-23 87 views
1

我正在爲iOS開發一款駕駛遊戲,其中一輛汽車(UIView)放在谷歌地圖ios api的頂部。我無法檢測出現在地圖上的車輛和灰色建築物的碰撞。谷歌地圖iOS賽車遊戲碰撞檢測?

我一直在嘗試通過像素顏色來實現,即檢查汽車前方的像素顏色是否爲建築物屋頂的顏色(灰色)。沒有直接訪問iPhone像素的顏色,所以我使用谷歌地圖截圖方法來獲取圖像並從中獲取像素顏色。問題是,我只能拍攝剛剛離開的屏幕。我正在使用 mapImage = [GMSScreenshot screenshotOfMainScreen];。我也嘗試過獲得窗口和屏幕,並呼籲mapImage = [GMSScreenshot screenshotOfScreen:topWindow.screen];都具有相同的效果。

這個問題的解決方案是什麼?你能想出更好的方法來處理這種情況下的碰撞嗎?反向地理編碼是否有能力檢測建築物與街道的頂部? 感謝您的幫助!

編輯: 圖片: Interface Builder的:左邊是主菜單,右邊是遊戲。左上角的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 2013-04-23 06:07:43

回答

0

你是否在每一幀(或在某個時間間隔)得到一個新的截圖,例如從你的更新回調?

當您創建或更改它時,GMSMapView不會立即呈現 - 它會在稍後更新時呈現。因此,當您在viewDidLoad中截取屏幕截圖時,您可能會在添加地圖視圖時(即初始菜單)獲取屏幕上的內容。

+0

我只是在viewdidload中調用它,然後當我離開屏幕並更換攝像頭時。但是,我發現在更新功能中調用它非常緩慢,並導致汽車運動波動。更具體地說,汽車運動由updateClock計時器決定,並且該窗口在crashTimer中更新。有沒有一種方法可以避免每秒鐘的這種不穩定?我也嘗試過兩次調用屏幕截圖方法,但是這也不起作用。 – 2013-04-24 04:12:53

+0

當您更新地圖上的相機時,它將在下次更新時「稍後一段時間」進行渲染。它似乎瞄準了大約30fps,所以我想它可能會在33ms左右後纔會渲染地圖。當你改變相機時,也許你可以設置一個計時器,在一小段延遲後拍攝新的截圖。 – 2013-04-25 02:15:29

+0

工作,謝謝!但現在看來,屏幕截圖正在採取的圖像順時針旋轉90度,任何想法如何解決這個問題? – 2013-04-25 05:20:08