1

フレームが正しく指定された同じスプライトシート内の両方で、タンクベースの上にタレットがあります。プロジェクトをビルドして実行すると、タレットがタンクの中心のアンカーポイントに沿って回転するようになります。砲塔は戦車の子であるため、移動時に一緒に留まります。ただし、回転させようとすると、砲塔は次のように遠く離れた場所にアンカー ポイントを設定しているように見えます。ここに画像の説明を入力ここに画像の説明を入力

これは私の初期設定です:

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

2 に答える 2

0

うーん。これを引き起こしている可能性があると私が考える唯一のことは、タレット アセットが中央に配置されていないか、空白スペースが多いことです。とは言っても、砲塔のアンカーポイントで遊んでみます。

于 2012-07-16T17:39:40.590 に答える
0

タレットはタンクの子であるため、次のようになります。

 _turret.position = ccp(40, 50);

砲塔をタンクの原点 (バウンディング ボックスの左下隅) から 40x50 オフセットします。タレットが戦車の中心になるように位置を設定してみてください。

 _turret.position = ccp(tank.contentSize.width * tank.anchorPoint.x,
                        tank.contentSize.height * tank.anchorPoint.y);
于 2012-07-16T17:40:31.417 に答える