2010-11-05 92 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())]; 
}