【问题标题】:Cocos2d sprite touch events in hi-res mode高分辨率模式下的 Cocos2d 精灵触摸事件
【发布时间】:2010-11-07 21:12:04
【问题描述】:

我有一个精灵类,其中包括用于触摸和拖动的触摸侦听器。这一切都很好。

但我最近为我的所有精灵添加了高分辨率图像,并在应用程序委托中启用了视网膜显示支持:

[director setContentScaleFactor:2];

我现在遇到的问题是,当比例因子加倍时,我的精灵类不再检测触摸。我尝试使用这些解决方案无济于事:http://www.cocos2d-iphone.org/forum/topic/10284

在我的精灵类中,我有一个 rect 方法:

- (CGRect)rect
{
    CGSize s = [self.texture contentSizeInPixels];
    return CGRectMake(-s.width / 2, -s.height / 2, s.width, s.height);
}

然后在我的 containsTouchLocation 方法中:

- (BOOL)containsTouchLocation:(UITouch *)touch
{
    return CGRectContainsPoint(self.rect, [self convertTouchToNodeSpaceAR:touch]);
}

当我在这里手动返回 YES 时,一切都按应有的方式工作,因此显然与 CGRect 点有关。

有什么想法吗?我正在使用 Cocos2d 0.99.5

谢谢。

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

    好的,我已经弄清楚了(在 cocos2d 社区的帮助下)。如果将来其他人遇到此问题,这就是您解决此问题的方法。

    在您的项目中,找到 CCNode.m 并一直向下,将这两个方法替换为:

    - (CGPoint)convertTouchToNodeSpace:(UITouch *)touch
    {
        CGPoint point = [touch locationInView: [touch view]];
        point = [[CCDirector sharedDirector] convertToGL: point];
        return [self convertToNodeSpace:ccp( point.x * CC_CONTENT_SCALE_FACTOR(), point.y * CC_CONTENT_SCALE_FACTOR())]; //point];
    }
    
    - (CGPoint)convertTouchToNodeSpaceAR:(UITouch *)touch
    {
        CGPoint point = [touch locationInView: [touch view]];
        point = [[CCDirector sharedDirector] convertToGL: point];
        return [self convertToNodeSpaceAR:ccp( point.x * CC_CONTENT_SCALE_FACTOR(), point.y * CC_CONTENT_SCALE_FACTOR())];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多