我有一个精灵类,包括用于触摸和拖动的触摸侦听器。这一切都很好。
但我最近为我的所有精灵添加了高分辨率图像,并在应用代表中使用此功能启用了视网膜显示支持:
[director setContentScaleFactor:2];
我现在遇到的问题是当比例因子加倍时,我的精灵类不再检测触摸。我试图使用这些解决方案无济于事:http://www.cocos2d-iphone.org/forum/topic/10284
在我的sprite类中,我有一个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
感谢。
答案 0 :(得分: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())];
}