6

几乎没有关于此的信息,所以这是我的问题:

我正在开发一个 2 人“坐在对面”的 ipad 游戏,而对面的玩家很难点击按钮……因为苹果似乎会根据设备方向自动切换触摸(这非常适合常规使用或主要播放器)。有没有办法重置它或告诉ipad不要这样做?(顺便说一句,iPhone 也这样做)

这就是我所发现的: 鉴于这种明显的不一致,我决定通过打开移动部件的“边界”来欺骗它,以便在部件区域下方有一个区域供用户点击。总的来说,用户似乎是在一个物体的下方而不是在它的上方——所以不要太注意由 iOS 引起的移动。

因此,如果没有简单的方法来防止偏移,那么为对方玩家移动每个 uiview(或子类)边界的唯一解决方案是什么?或者这甚至是正确的?

任何答案表示赞赏。

4

2 回答 2

3

是的,触摸偏移确实存在,它的大小没有记录并且不能取消(至少,使用公共 API)。

您必须对偏移量本身进行逆向工程。我会在 UIKit 所说的触摸处显示一个小圆圈,然后通过反复试验来调整它。当您有偏移量时,您可以在事件处理程序中手动应用它(-2 * 偏移量),仅针对对方玩家。

我不知道它感觉如何,你必须尝试一下。

于 2011-10-24T05:00:06.557 回答
3

编辑:天哪,你们我终于找到了方法!我创建了 UIView 的子类,并让我的游戏视图(包含所有 UIScrollView、UIButton 等)使用该子类。然后这是我添加到子类的唯一代码:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    CGPoint touchSpot = point;
    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"] && touchSpot.y < 512)
    {
        touchSpot = CGPointMake(touchSpot.x, touchSpot.y+10);
    }

    UIView *hitView = [super hitTest:touchSpot withEvent:event];

    if (hitView == self)
        return self; // you can return nil here if you want touches to go through this view (ie transparent space in a HUD overlay or w/e)

    return hitView;
}

到目前为止,这工作得很好......坐在对面的人有很好的触摸反应,就像在“家”边的玩家一样。但请注意不要在此视图之上呈现视图...一切都会通过该方法...

旧解决方案(在我发现之前 ^):

好吧,现在我的解决方案是继承uigesturerecognizer,转发任何触摸(即对识别器没有限制),然后将其添加到我的游戏视图中。然后响应任何触摸的方法仅在状态为 Ended 时运行,如果是,则继续循环遍历每个子视图(不是很多)以查看触摸是否与一个相交。同样,对于对面的玩家,它会比较稍微偏移的矩形(对于每个子视图)。

我会看看我是否能找到更有效的方法......但到目前为止还可以。

我也可以让我的游戏视图成为一个 uiview 子类并覆盖 touchesbegan/moved/ended,但我已经把它全部放置好了,所以我使用了识别器(因此不必继承 uiview)。

于 2011-10-31T06:01:19.863 回答