【问题标题】:sprite not rotating correctly (cocos2d)精灵没有正确旋转(cocos2d)
【发布时间】:2012-07-16 17:36:07
【问题描述】:

我在坦克底座顶部有一个炮塔,两者都在同一个精灵表中,并正确指定了框架。当我构建和运行项目时,我希望炮塔沿着坦克中心的锚点旋转。炮塔是坦克的一个孩子,因此它们在移动时会保持在一起。但是,当我尝试旋转它时,炮塔似乎将其锚点设置在远处的某个地方,如下所示:

这是我的初始化:

- (id)initWithLayer:(HelloWorldLayer *)layer type:(int)type hp:(int)hp {

NSString *spriteFrameName = [NSString stringWithFormat:@"tank%d_base.png", type];    
if ((self = [super initWithSpriteFrameName:spriteFrameName])) {
    _layer = layer;
    _type = type;
    self.hp = hp;
    _turret = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"tank%d_turret.png", type]];
    _turret.anchorPoint = ccp(0.5, 0.25);
    [self scheduleUpdateWithPriority:-1];
    [self addChild:_turret];
     _turret.position = ccp(40, 50);
}

return self;
}

我在这里旋转精灵(我使用 360 度的射击范围)

- (void)shootToward:(CGPoint)targetPosition {

//CGPoint offset = ccpSub(targetPosition, self.position);
float x = abs(targetPosition.x) - self.position.x;
float y = abs(targetPosition.y) - self.position.y;
float angle;
float angleDegrees;
if (x < 0 && y > 0) {
    angle = atanf(y/x);
    angleDegrees = -CC_RADIANS_TO_DEGREES(angle) - 90;
}
else if (x < 0 && y < 0) {
    angle = atanf(y/x);
    angleDegrees = -CC_RADIANS_TO_DEGREES(angle) - 90;
}
else if (x > 0 && y < 0) {
    angle = atanf(y/x);
    angleDegrees = 90 - CC_RADIANS_TO_DEGREES(angle);
}
else if(x > 0 && y > 0) {
    angle = atanf(y/x);
    angleDegrees = 90 - CC_RADIANS_TO_DEGREES(angle);
}
switch (_layer.rotateInt) {
    case 0:
        angleDegrees = angleDegrees;
        break;
    case 1:
        angleDegrees = angleDegrees+ 180;
        break;
    case 2:
        angleDegrees = angleDegrees;
        break;
    case 3:
        angleDegrees = angleDegrees + 90;
        break;
    case 4:
        angleDegrees = angleDegrees - 90;
        break;
    default:
        break;
}

NSLog(@"%f",angleDegrees);
_turret.rotation = angleDegrees;

【问题讨论】:

    标签: iphone cocos2d-iphone rotation sprite


    【解决方案1】:

    嗯。我认为可能导致这种情况的唯一原因是炮塔资产未居中或有很多空白空间。也就是说,我会尝试使用炮塔的锚点。

    【讨论】:

    • 问题是,当我将其设置为常规的 'spriteWithFile:' 时,它可以工作,但无法加载正确的图像
    • 我在考虑。如何将坦克精灵锚设置为 self.anchor = ccp(0.5, 0.5)
    【解决方案2】:

    由于炮塔是坦克的子级,因此:

     _turret.position = ccp(40, 50);
    

    将炮塔从坦克的原点(边界框的左下角)偏移 40x50。尝试设置炮塔以坦克为中心的位置:

     _turret.position = ccp(tank.contentSize.width * tank.anchorPoint.x,
                            tank.contentSize.height * tank.anchorPoint.y);
    

    【讨论】:

    • 修复了一点,但现在的问题是它位于以坦克为中心的圆的半径上。
    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多