1

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

我一直在尝试通过像素颜色来做到这一点,即检查汽车前面的像素颜色是否是建筑物屋顶的颜色(灰色)。无法直接访问 iPhone 的像素颜色,所以我使用谷歌地图截图方法来获取图像并从中获取像素颜色。问题是,我只能截取刚刚离开的屏幕。我正在使用 mapImage = [GMSScreenshot screenshotOfMainScreen];. 我也尝试过获取窗口和屏幕并调用mapImage = [GMSScreenshot screenshotOfScreen:topWindow.screen];两者都有相同的效果。

这个问题的解决方案是什么?你能想出一种更好的方法来处理这种情况下的碰撞吗?反向地理编码是否能够检测建筑物的顶部和街道?感谢您的任何帮助!

编辑:图片: 界面生成器:左边是主菜单,右边是游戏。左上角的 Ui 图像视图设置为当前屏幕截图,以供参考。我是这样知道的

Game Play,如您所见,它只显示上一个菜单。

我的 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];
}
4

1 回答 1

0

您是否每帧(或某个时间间隔)都获得一个新的屏幕截图,例如从您的更新回调?

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

于 2013-04-24T02:21:29.743 回答