Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone CCSprite主播点未按预期工作?_Cocos2d Iphone_Sprite_Ccsprite - Fatal编程技术网

Cocos2d iphone CCSprite主播点未按预期工作?

Cocos2d iphone CCSprite主播点未按预期工作?,cocos2d-iphone,sprite,ccsprite,Cocos2d Iphone,Sprite,Ccsprite,让我先解释一下我想做什么。我有一个大约73帧的全屏动画,由于这些图像太大,我无法使用精灵画面,所以我只是将它们作为单独的精灵画面添加到动画中。我的目标是播放动画,然后让它从左到右消失。我实现这种外观的方法是更新帧的(TextureUplate)宽度,并最终使TextureUplate宽度为0。所以我已经设置了我要运行动画的CCSprite -(id) init { if( (self=[super init])) { self.transSprite = [CCSpr

让我先解释一下我想做什么。我有一个大约73帧的全屏动画,由于这些图像太大,我无法使用精灵画面,所以我只是将它们作为单独的精灵画面添加到动画中。我的目标是播放动画,然后让它从左到右消失。我实现这种外观的方法是更新帧的(TextureUplate)宽度,并最终使TextureUplate宽度为0。所以我已经设置了我要运行动画的CCSprite

-(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。取而代之的是,我只是把它们做成了一个很好的中间尺寸,然后我检查看什么设备正在运行,并相应地缩放精灵。这是我的问题,我将精灵锚定点设置在屏幕的右下角,这样当我改变纹理的宽度时,它的大小将从左到右减小。除了我改变每个雪碧框架的纹理宽度外,这个想法似乎一切都很好

- (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);

    }

}
因此,当我运行动画并开始更改纹理的宽度时,它从左侧和右侧都会减小,就像是忽略了锚点一样。spriteFrames是否有自己的主播点或正在发生什么

这是一幅正在发生的事情的插图。这是为完整纹理设置的CCSprite,主播点位于右下角。

现在,将CCSprite的纹理设置得稍微小一点

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


我不知道为什么会发生这种情况。动画帧是否不考虑它们正在运行的CCSprite的定位点?

除了缩放问题,还有两件事可以做。首先,也可能是最简单的,就是简单地在动画顶部添加一个CCLayerColor,并相应地将其缩小。这样,您就不需要修改每个动画帧的矩形

第二个选项是使用剪裁节点,可在以下位置找到:


“我只是把它们做成了一个很好的中间尺寸”你能告诉我网络上有什么地方表明苹果需要在视网膜设备上使用高清图形吗?这里是自2013年5月1日以来的新指南:你可以在开发者中心的某个地方找到确切的措辞,但我不知道在哪里。至于“视网膜支持”意味着“所有图像都需要完全视网膜分辨率”的程度,则取决于苹果。就个人而言,我不会冒险不使用全视网膜分辨率,至少不用于前景视觉效果。spriteFrame没有anchorPoint属性!你说得对。道歉。剪裁节点就是您要查找的对象。
   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);