0

クラスで使用するすべての画像を含むアトラスを作成しました。これが画像から作成されたスプライトである場合、次のように作成します

mySprite = [CCSprite spriteWithFile:@"white.png" rect:frame];

「white.png」は、API の rect:frame で定義されている CCSprite サイズ全体をカバーするために拡大する 1x1 ピクセル イメージです。

しかし、I/O とメモリを最適化するために、white.png をアトラスに入れて、

mySprite = [CCSprite spriteWithSpriteFrameName:@"white.png"];

しかし、これは 1x1 ピクセルのスプライトを作成します。だから、私の考えは、これらの行でCCSpriteを拡張するカテゴリを作成することでした

@implementation CCSprite (CCSprite_Resize)


-(void)resizeTo:(CGSize) theSize
{
    CGFloat newWidth = theSize.width;
    CGFloat newHeight = theSize.height;


    float startWidth = self.contentSize.width;
    float startHeight = self.contentSize.height;

    float newScaleX = newWidth/startWidth;
    float newScaleY = newHeight/startHeight;

    self.scaleX = newScaleX;
    self.scaleY = newScaleY;

}

だから私はこれを行うことができました

mySprite = [CCSprite spriteWithSpriteFrameName:@"white.png"];
[mySprite resizeTo:frame.size];

1x1 スプライトは、必要なサイズをカバーするために引き伸ばされます。

問題は、これが機能していないことです。

手がかりはありますか?ありがとう。

4

2 に答える 2

2

のようなものをオーバーライドしていない海岸を作成します- (CGAffineTransform)nodeToParentTransform。私は cocos2d で Box2d 物理演算を使用しており、提供されているテンプレート クラス PhysicsSprite (CCSprite のサブクラス) がそれをオーバーライドしましたが、バグがありました: scale プロパティは何も変更しませんでした。私は次のように修正しました:

- (CGAffineTransform)nodeToParentTransform
{
    b2Vec2 pos = body_->GetPosition();

    float x = pos.x * PTM_RATIO;
    float y = pos.y * PTM_RATIO;

    // Make matrix
    float radians = body_->GetAngle();
    float c = cosf(radians);
    float s = sinf(radians);

    if (!CGPointEqualToPoint(anchorPointInPoints_, CGPointZero))
    {
        x += c * -anchorPointInPoints_.x * scaleX_ + -s * -anchorPointInPoints_.y * scaleY_;
        y += s * -anchorPointInPoints_.x * scaleX_ + c * -anchorPointInPoints_.y * scaleY_;
    }

    // Rot, Translate Matrix
    transform_ = CGAffineTransformMake( c * scaleX_, s * scaleX_,
    -s * scaleY_, c * scaleY_,
    x, y );

    return transform_;
}

もともと無かっscaleX_たりscaleY_掛けたり。

于 2012-06-20T04:10:19.187 に答える
0

あなたの場合、 CCLayerColor を使用して単色レイヤーを作成できるようです。スプライトを使用する必要はありません。

あなたの質問について - frame.size がゼロでないことを確認してください (CGSizeZero)

于 2012-06-19T20:05:45.273 に答える