Прямо к делу, у меня есть класс, который в основном унаследован от CCLayer и имеет 2 спрайта как детей.
some_layer.h
@interface some_layer : CCLayer {
CCSprite *back;
CCSprite *front;
}
some_layer.mm
// on "init" you need to initialize your instance
-(id) init
{
if( (self=[super init])) {
back = [CCSprite spriteWithFile:@"back.png"];
front = [CCSprite spriteWithFile:@"front.png"];
[front setOpacity:0];
[self addChild:back];
[self addChild:front];
//this is after modification
back.positionInPixels = CGPointMake(winSizeInPixels.width/2,winSizeInPixels.height/2);
front.positionInPixels = CGPointMake(winSizeInPixels.width/2,winSizeInPixels.height/2);
}
return self;
}
//after the edit
-(void) setPositionInPixels:(CGPoint)positionInPixels {
[super setPositionInPixels:CGPointMake(positionInPixels.x -(winSizeInPixels.width/2), positionInPixels.y -(winSizeInPixels.height/2))];
}
-(void) setPosition:(CGPoint)position {
[super setPosition:CGPointMake(position.x -(winSize.width/2), position.y -(winSize.height/2))];
}
Конечно, это не вся реализация уровня, но этот код - единственный, связанный с проблемой, дайте мне знать, если вы считаете, что вам нужно больше.
Теперь в некоторой частиродительский слой пытается это сделать
float x = winSizeInPixels.width/2;
float y = winSizeInPixels.height/2;
[self setPositionInPixels:CGPointMake(x, y)];
mylayer = [[some_layer alloc] init];
[mylayer setPositionInPixels:CGPointMake(-offset, -offset)];
[self addChild:mylayer];
[mylayer runAction:[CCEaseInOut actionWithAction:[CCRotateTo actionWithDuration:speed*20 angle:angle] rate:4]];
Вывод этого кода заключается в том, что я вижу вращающиеся спрайты, но не вокруг центра some_layer, я хочу, чтобы они вращались и оставались на своем месте.(вращаться вокруг себя), то, что я пытаюсь сделать, это вращать, одновременно масштабировать их, сохраняя их позиции на экране,
Спрайты вращаются вокруг некоторой случайной точки (возможно, вокруг родителяих родитель, который является self в последнем коде)
Кстати, я не касаюсь спрайтов задних и передних позиций, я имею дело только с этим "some_layer", я попытался установить ихпозиции в (0,0)
Единственное время, когда положение "some_layer" является правильным, это когда угол поворота равен 0, а масштаб равен 1,0, если что-то неясно, пожалуйста, дайте мне знать, большое спасибоЯ могу предоставить некоторые снимки экрана
Редактировать: я изменил код выше, он работает как обходной путь, но я думаю, что это не правильный способ сделать это !!!Пожалуйста, проверьте комментарии, я не знаю, что странно происходит !!
Спасибо!
Редактировать 2: Ответ найден
Ответ сам себе
Добавьте это к методу init some_layer.mm
[self setContentSize:CGSizeMake(0, 0)];
Спасибо всем, кто пытался мне помочь:)
Анализ кода - лучшее решение!
Кстати, я удалил переопределенные методы для обоих setPos и удалил код, который изменяет позиции спрайтов, теперь это так
// on "init" you need to initialize your instance
-(id) init
{
if( (self=[super init])) {
back = [CCSprite spriteWithFile:@"back.png"];
front = [CCSprite spriteWithFile:@"front.png"];
[front setOpacity:0];
[self addChild:back];
[self addChild:front];
[self setContentSize:CGSizeMake(0, 0)];
}
return self;
}