0

我已经创建了一个包含我将在课堂上使用的所有图像的图集。如果这是从图像创建的精灵,我会像这样创建它

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

“white.png”是一个 1x1 像素的图像,我正在拉伸它以覆盖整个 CCSprite 大小,由该 API 上的 rect:frame 定义。

但为了优化 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。我将 Box2d 物理与 cocos2d 一起使用,并提供了模板类 PhysicsSprite(CCSprite 的子类)覆盖了它,并且有一个错误:比例属性没有改变任何东西。我这样修复它:

- (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 回答