首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CCSprite anchorPoint没有按预期工作吗?

CCSprite anchorPoint没有按预期工作吗?
EN

Stack Overflow用户
提问于 2013-05-14 05:33:35
回答 1查看 383关注 0票数 0

让我从解释我正在尝试做的事情开始。我有一个大约73帧的全屏幕动画,这些图像太大了,我无法使用sprite sheets,所以我只是将它们作为单独的spriteframe添加到动画中。我的目标是让动画播放完,然后让它从左到右消失。我实现这个外观的方法是更新框架( textureRect )的宽度,并最终将textureRect宽度设为0。因此,我已经设置了要在其上运行动画的CCSprite。

代码语言:javascript
复制
-(id) init {

    if( (self=[super init])) {

        self.transSprite = [CCSprite spriteWithFile:@"transition0.pvr.ccz"];

        if (CC_CONTENT_SCALE_FACTOR() == 1) {

            //iPhone 3Gs

            self.transSprite.scaleX = .563;
            self.transSprite.scaleY = .665;

            self.transSprite.position = ccp(self.transSprite.contentSize.height - 3, -1);
            self.transSprite.anchorPoint = ccp(1, 0);
            [self addChild:self.transSprite z:5];

        }

        else if (kiPhone5) {

            //iPhone 5

            self.transSprite.scale = self.transSprite.scale * 1.335f;

            self.transSprite.position = ccp(569, -1);
            self.transSprite.anchorPoint = ccp(1, 0);
            [self addChild:self.transSprite z:5];

        }

        else {

            //iPhone 4

            self.transSprite.scaleX = 1.126;
            self.transSprite.scaleY = 1.33;

            self.transSprite.position = ccp(481, -1);
            self.transSprite.anchorPoint = ccp(1, 0);
            [self addChild:self.transSprite z:5];

        }

    }

    return self;
}

所以之所以要检查什么设备正在运行,是因为我没有制作两个版本的动画帧HD和SD。取而代之的是,我只是让它们在大小之间变得很好,然后我会检查哪个设备正在运行,并相应地缩放sprite。这就是我的问题所在,我将精灵anchorPoint设置在屏幕的右下角,这样当我改变textureRect的宽度时,它的大小就会从左到右减小。除了当我改变每个精灵框架的textureRect的宽度时,这个想法似乎一切都工作得很好。

代码语言:javascript
复制
- (void) rectUpdate3Gs {

    for (CCAnimationFrame *frame in transition.frames) {
        frame.spriteFrame.rect = CGRectMake(0, 0, 856, 484);
    }

}

- (void) retinaRectUpdate {

    for (CCAnimationFrame *frame in transition.frames) {
        frame.spriteFrame. rect = CGRectMake(0, 0, 428, 242);

    }

}

因此,当我运行动画并开始更改textureRect的宽度时,它从左侧和右侧同时减小,这就像是忽略了anchorPoint。spriteFrames是否有自己的anchorPoint或发生了什么。

这是什么是happening.This的插图是为完整纹理设置的CCSprite,anchorPoint在右下角。

代码语言:javascript
复制
   self.transSprite.scaleX = .563;
    self.transSprite.scaleY = .665;

    self.transSprite.position = ccp(self.transSprite.contentSize.height - 3, -1);
    [self addChild:self.transSprite z:5];
    [self.transSprite setTextureRect:CGRectMake(0, 0, 856, 484)];
    self.transSprite.anchorPoint = ccp(1, 0);

现在,这将CCSprite的textureRect设置得稍微小一些。

这就是我希望它工作的方式,就是从左到右减去纹理的宽度。但是当我改变动画帧的宽度以匹配这个减去的宽度时,这就是我得到的。

我不知道为什么会发生这样的事情。动画帧是否不遵守运行它们的CCSprite的锚点?

EN

回答 1

Stack Overflow用户

发布于 2013-05-17 06:08:36

抛开伸缩问题不谈,你可以做两件事。首先,也可能是最简单的,就是简单地在动画上添加一个CCLayerColor,并相应地缩小。这样你就不需要修改每个动画帧的矩形了。

第二种选择是使用裁剪节点,可在此处找到:

Here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16531525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档