0

さて、私が何をしているのかがわかるようにコードを投稿し、最後に質問をします。

私の武器クラスでは、それを作成してアニメートします。

-(id) initWithWeapon
{
    // Load the Texture Atlas sprite frames, this also loads the Texture with the same name.
    CCSpriteFrameCache *frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
    [frameCache addSpriteFramesWithFile:@"weapon1.plist"];
    if ((self = [super initWithSpriteFrameName:@"Gun_image.png"])) {
        // create an animation object from all the sprite animation frames
        CCAnimation* anim = [CCAnimation animationWithFrame:@"Gun" frameCount:30 delay:0.08f];

        // run the animation by using the CCAnimate action
        CCAnimate* animate = [CCAnimate actionWithAnimation:anim];
        CCRepeatForever* repeat = [CCRepeatForever actionWithAction:animate];
        [self runAction:repeat];
    }
    self.scale = 0.35f;
    return self;
}

これは、アニメーションを処理する上記のメソッドです。

// Creates an animation from sprite frames.
+(CCAnimation*) animationWithFrame:(NSString*)frame frameCount:(int)frameCount delay:(float)delay
{
    // load the weapon's animation frames as textures and create a sprite frame
    NSMutableArray* frames = [NSMutableArray arrayWithCapacity:frameCount];
    for (int i = 0; i < frameCount; i++)
    {
        NSString* file = [NSString stringWithFormat:@"%@%i.png", frame, i];
        CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
        CCSpriteFrame* frame = [frameCache spriteFrameByName:file];
        [frames addObject:frame];
    }

    // return an animation object from all the sprite animation frames
    return [CCAnimation animationWithFrames:frames delay:delay];
}

したがって、私の問題は、Weaponクラスのインスタンスをスケーリングすると(上記のように-self.scale = 0.35f)、アンカーポイントが[0.0,0.0]ではなく[0.0,0.0]に設定されているように、左下隅にスケールダウンすることです。 [0.5,0.5]そして私はそれをスプライトの中心からちょうどスケーリングしたいです。いくつかのNSLogを入力しましたが、アンカーポイントは[0.5,0.5]にあると表示されます。誰かが私がこれを理解するのを手伝ってもらえますか?

4

1 に答える 1

0

—問題は解決しました— </ p>

私はこれに少し不満を感じていたので、しばらく経った後、もう一度蛇行して解決策を見つけることができるのではないかと考えてしばらく放置しました...戦略はうまくいきました!

もともと私は、私が示すように、Weaponクラスで、そしてWeaponクラスのインスタンスを作成するgamelayerクラスでそれをスケーリングしようとしましたが、どちらの場合も、画像は左下隅にのみスケールダウンされていました。アンカーポイントを[0.5f、0.5f]に設定します。

そこで今回は、アンカーポイントを設定し、画面に追加した後、前ではなくスケーリングしてみました。

前 -

WeaponClass *theWeapon = [WeaponClass weapon];
theWeapon.position = ccp(theScroll.viewSize.width * 0.5f,theScroll.viewSize.height * 0.5f);
theWeapon.anchorPoint = ccp(0.5f,0.5f);
theWeapon.scale = 0.5f;;
[theScroll addChild:theWeapon];

後 -

WeaponClass *theWeapon = [WeaponClass weapon];
theWeapon.position = ccp(theScroll.viewSize.width * 0.5f,theScroll.viewSize.height * 0.5f);
[theScroll addChild:theWeapon];
theWeapon.anchorPoint = ccp(0.5f,0.5f);
theWeapon.scale = 0.5f;;

こんなに単純なことをやろうとは思わなかったので、自分を蹴り飛ばしたい気がしますが、とにかく今は必要に応じて動いています。

于 2011-05-17T23:10:43.933 に答える