2010-11-05 93 views
1

我有一个精灵类,包括用于触摸和拖动的触摸侦听器。这一切工作正常。高分辨率模式下的Cocos2d精灵触摸事件

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

[director setContentScaleFactor:2]; 

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

在我的精灵类我有一个矩形方法:

- (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

谢谢。

回答

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())]; 
}