Так что я довольно близок к завершению моего маленького проекта, и я пытаюсь убедиться, что мое приложение совместимо с iPhone 3 и 4 ... но это действительно меня колотит. Я использую код CCPickerview с открытым исходным кодом, отправленный hm50 некоторое время назад (http://www.cocos2d-iphone.org/forum/topic/10160). Он работает GREAT для iPhone 4, но совсем не в симуляторе iPhone 3. Я думаю, что проблема здесь где-то в реализации. Я могу видеть, что происходит, когда я неправильно оставляю -hd-тег на изображении. Похоже, что изображение становится чистым в половине раз в режиме не-сетчатки, и я не могу сказать, что я достаточно эксперт, чтобы определить, почему.Почему я не вижу свое изображение с iPhone 3?
-(void)makePages {
CCSprite *overlay = [CCSprite spriteWithFile:@"overlay-hd.png"];
CGSize s = CGSizeMake(overlay.contentSize.width, overlay.contentSize.height);
self.contentSize = s;
CCLayerColor *backLayer = [CCLayerColor layerWithColor:(ccColor4B){248,250,251,255} width:self.contentSize.width height:self.contentSize.height];
backLayer.position = ccp(-self.contentSize.width/2, -self.contentSize.height/2);
[self addChild:backLayer];
self.baseLayer = [CCLayerColor layerWithColor:(ccColor4B){150,150,150,0} width:s.width height:imgSize.height * numPages];
for (int i=0; i < [arrayPages count]; i++) {
CCNode* n = [arrayPages objectAtIndex:i];
n.position = ccp(s.width/2, s.height/2 + i * (imgSize.height + padding));
[baseLayer addChild:n];
}
baseLayer.position = ccp(-s.width/2, -s.height/2 - s.height * currentPage);
[self addChild:baseLayer];
overlay.position = ccp(0, 0);
//overlay.opacity = 0;
[self addChild:overlay];
rect = CGRectMake(self.position.x - s.width/2, self.position.y - s.height/2, s.width, s.height);
[self moveToPagePosition];
}
- (void) visit
{
if (!self.visible)
return;
glPushMatrix();
glEnable(GL_SCISSOR_TEST);
CGSize size = [[CCDirector sharedDirector] winSize];
CGRect scissorRect = rect;
ccDeviceOrientation orientation = [[CCDirector sharedDirector] deviceOrientation];
switch (orientation)
{
case kCCDeviceOrientationPortrait:
break;
case kCCDeviceOrientationPortraitUpsideDown:
scissorRect.origin.x = size.width-scissorRect.size.width-scissorRect.origin.x;
scissorRect.origin.y = size.height-scissorRect.size.height-scissorRect.origin.y;
break;
case kCCDeviceOrientationLandscapeLeft:
{
float tmp = scissorRect.origin.x;
scissorRect.origin.x = scissorRect.origin.y;
scissorRect.origin.y = size.width-scissorRect.size.width-tmp;
tmp = scissorRect.size.width;
scissorRect.size.width = scissorRect.size.height;
scissorRect.size.height = tmp;
}
break;
case kCCDeviceOrientationLandscapeRight:
{
float tmp = scissorRect.origin.y;
scissorRect.origin.y = scissorRect.origin.x;
scissorRect.origin.x = size.height-scissorRect.size.height-tmp;
tmp = scissorRect.size.width;
scissorRect.size.width = scissorRect.size.height;
scissorRect.size.height = tmp;
}
break;
}
glScissor(scissorRect.origin.x*2, scissorRect.origin.y*2,
scissorRect.size.width*2, scissorRect.size.height*2);
[super visit];
glDisable(GL_SCISSOR_TEST);
glPopMatrix();
}
Если переместить свиток на правый, больше его показывает вверх, но я действительно не хочу его там. Может ли кто-нибудь из вас блестящими объективными c-гуру помочь мне в этом?
EDIT:
После дальнейшего расследования, вопрос, без сомнения:
rect = CGRectMake(self.position.x - s.width/2, self.position.y - s.height/2, s.width, s.height);
Если я делаю это
rect = CGRectMake(self.position.x - s.width*2.05, self.position.y - s.height/1.48, self.contentSize.width*1.3, self.contentSize.height*.48);
Это прекрасно работает ... но я не» t думаю, что это решение очень элегантно, и оно должно основываться на размере изображения наложения. Я не уверен, что я делаю неправильно здесь.
Я обязательно проверю это, но не должно ли все изображение отображаться? Когда я удаляю тэг -hd, появляется абсолютно нулевое значение, и мне интересно, является ли этот эффект отсечения тем, что отвечает. – PWiggin
Хорошо. Лучше всего я могу сказать, что размер содержимого отображается правильно после удаления тега -hd. Проблема заключается в том, что изображение никогда не появляется. Когда я выхожу из -hd-тега и жестко кодирую размер контента наполовину, он также исчезает. – PWiggin
Возможно, вам понадобится создать свою собственную версию изображения с низким разрешением. Возможно, «CCPickerview», о котором вы говорите, был разработан только с графикой сетчатки. –