0

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

それを作成してアニメーション化するための私の Weapon クラスで:

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

1 に答える 1

3

— 問題は解決しました —</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:20:21.163 に答える