谷歌地图iOS赛车游戏碰撞检测?

时间:2013-04-23 06:06:46

标签: ios objective-c google-maps-api-3 google-maps-sdk-ios

我正在为iOS制作驾驶游戏,其中一辆汽车(UIView)放在谷歌地图ios api之上。我无法检测到汽车与地图上出现的灰色建筑物的碰撞。

我一直试图用像素颜色来做,即检查汽车前方的像素颜色是否是建筑物屋顶的颜色(灰色)。没有直接访问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];
}

1 个答案:

答案 0 :(得分:0)

您是否每帧(或某个时间间隔)都有新的屏幕截图,例如来自您的更新回调?

GMSMapView在您创建或更改时不会立即呈现 - 它会在稍后的更新时呈现。因此,当您在viewDidLoad中截取屏幕截图时,您可能会在添加地图视图时获取屏幕上显示的内容,即初始菜单。