Позвольте мне начать с объяснения того, что я пытаюсь сделать. У меня полноэкранная анимация с примерно 73 кадрами и с такими большими изображениями я не могу использовать спрайт-листы, поэтому я просто добавляю их в анимацию как отдельные spriteframes. Моя цель состоит в том, чтобы воспроизвести анимацию, а затем исчезнуть слева направо. Способ, которым я достигаю этого взгляда, заключается в обновлении ширины (textureRect) кадров и, в конечном итоге, создании ширины textureRect 0. Поэтому я настроил CCSprite, над которым я буду запускать анимацию.CCSprite anchorPoint работает не так, как ожидалось?
-(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;
}
Так что причина для проверки того, что устройство работает, потому что я не сделал 2 версии анимации кадров HD и SD. Вместо этого я просто сделал их хорошим между размерами, а затем я проверяю, какое устройство работает, и соответственно масштабируйте спрайт. Итак, вот моя проблема. Я устанавливаю привязку Sprites в нижнем правом углу экрана, чтобы при изменении ширины текстуры она уменьшалась в размере слева направо. Кажется, что все отлично работает с этой идеей, кроме тех случаев, когда я изменяю ширину текстуры каждого кадра спрайта.
- (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 или что происходит.
Вот иллюстрация того, что происходит. Это CCSprite, настроенный для полной текстуры и с помощью 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);
Теперь это установка textureRect в CCSprite немного меньше.
Это способ, которым я хочу работать, чтобы вычесть ширину текстуры от слева направо. Но когда я изменяю ширину кадров анимации, чтобы соответствовать этой вычитаемой ширине, это то, что я получаю.
Я в недоумении, почему это происходит. Есть кадры анимации не уважать точку привязки CCSprite они работают на?
«Я просто сделал их хорошим между размером» <- это означает, что вы тратите память и производительность на устройствах SD , и заставить вещи выглядеть размытыми на устройствах Retina и неодобрение рисков со стороны Apple (активы Retina теперь являются обязательными для устройств Retina!). Пересмотрите этот подход. Независимо от того, чтобы лучше понять, скриншоты проблемы были бы очень полезными. – LearnCocos2D
Есть ли где-то в Интернете, что вы могли бы указать мне на то, что показывает, что яблоко требует HD-графики на сетчатых устройствах? – Stephen
Здесь новые рекомендации с 1 мая 2013 года: http://www.macobserver.com/tmo/article/apple-to-ios-developers-go-retina-or-go-home Вы можете найти точную формулировку в разработчике где-то в центре, я не знаю, где.Насколько «поддержка Retina» означает, что «все изображения должны быть в полном разрешении Retina» до Apple. Лично я бы не рискнул не использовать полное разрешение Retina, по крайней мере, не для визуальных изображений переднего плана. – LearnCocos2D