与Cocos2D中的Retina和ccTouchBegan问题

时间:2011-06-10 07:49:28

标签: cocos2d-iphone retina-display

我一直在xCode上使用cocos2D进行游戏,并且有一个问题要解决,这似乎超出了我的想法。

基本上我使用的是SneakyButton,这是一个捕获触摸事件的自定义类,因此您可以使用PNG文件或Circle Radius来执行某些操作。在我的情况下发射子弹。

当我在设备上以SD模式(1x比例)为iOS运行项目时(对于iPhone 4之前的视网膜)显示所有运行正常。

然而,当我在设备上以Retina显示模式(2x比例)运行项目时...我在应用程序的委托中将比例设置为2X。可以看到PNG。一切正常,但触摸没有出现。

我已将其缩小到代码的这一部分。

'
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    if (active) return NO;

    CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
    location = [self convertToNodeSpace:location];
        //Do a fast rect check before doing a circle hit check:
    if(location.x < -radius || location.x > radius || location.y < -radius || location.y > radius){
        return NO;
    }else{
        float dSq = location.x*location.x + location.y*location.y;
        if(radiusSq > dSq){
            active = YES;
            if (!isHoldable && !isToggleable){
                value = 1;
                [self schedule: @selector(limiter:) interval:rateLimit];
            }
            if (isHoldable) value = 1;
            if (isToggleable) value = !value;
            return YES;
        }
    }
return NO;
}
'
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    if (!active) return;

    CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
    location = [self convertToNodeSpace:location];
        //Do a fast rect check before doing a circle hit check:
    if(location.x < -radius || location.x > radius || location.y < -radius || location.y > radius){
        return;
    }else{
        float dSq = location.x*location.x + location.y*location.y;
        if(radiusSq > dSq){
            if (isHoldable) value = 1;
        }
        else {
            if (isHoldable) value = 0; active = NO;
        }
    }
}
'
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    if (!active) return;
    if (isHoldable) value = 0;
    if (isHoldable||isToggleable) active = NO;
}

- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event
{
    [self ccTouchEnded:touch withEvent:event];
}

@end
'

我认为我的问题出现在代码的半径部分...有没有人遇到过此问题或者您是否有任何关于我需要修改此代码的部分以使其工作的想法?在这个为期6个月的项目完成之前,这是我最后的绊脚石!救命!也提前谢谢!

1 个答案:

答案 0 :(得分:0)

你在哪里设置半径?或者你怎么得到它?如果你从png文件本身获得半径,请确保使用boundingbox作为radius而不是contentize,它会在应用任何缩放之前给出sprite的半径。