我正在为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];
}
答案 0 :(得分:0)
您是否每帧(或某个时间间隔)都有新的屏幕截图,例如来自您的更新回调?
GMSMapView
在您创建或更改时不会立即呈现 - 它会在稍后的更新时呈现。因此,当您在viewDidLoad
中截取屏幕截图时,您可能会在添加地图视图时获取屏幕上显示的内容,即初始菜单。