Я делаю небольшую игру, в которой основной слой игрового процесса увеличивается и уменьшается в зависимости от ряда параметров. Это делается путем установки атрибута .scale на долю 1. Работает хорошо.
У меня, однако, проблема в том, что при вызове [[CCDirector sharedDirector] winSize];
с любого из дочерних узлов я получаю масштабированный размер окна, что вроде как отстой :) Есть ли способ обойти это, кроме умножения всех моих проверок за пределами экрана по доле шкалы плюс один?
Вот пример
Я создаю CCLayer и размещаю на нем спрайты. Все спрайты имеют статическую переменную с размером экрана во время инициализации, в основном
static CGRect screenRect; //stored as a static variable for performance reasons
...
-(id)init{
...
// make sure to initialize the screen rect only once
if (CGRectIsEmpty(screenRect)){
CGSize screenSize = [[CCDirector sharedDirector] winSize];
screenRect = CGRectMake(0, 0, screenSize.width, screenSize.height);
CCLOG(@"Screen Size during init: %f, %f", screenSize.width, screenSize.height);
}
}
Затем я проверяю, движется ли спрайт, находится ли он вне экрана, и если да, я автоматически переношу его на противоположную сторону:
if(newPosition.x > screenRect.size.width){
newPosition.x = 0;
}else if(newPosition.x < 0){
newPosition.x = screenRect.size.width;
}
if(newPosition.y > screenRect.size.height){
newPosition.y = 0;
}else if(newPosition.y < 0){
newPosition.y = screenRect.size.height;
}
Все работает очень хорошо и как положено. Однако, если я изменю свойство scale
родительского CCLayer, то расположение за пределами экрана «масштабируется» вместе со слоем, что довольно странно. Так что, если я установлю CCLayer.scale = 0.5f;
, то кажется, что границы за пределами экрана также переместились «внутрь» экрана телефона. Я хочу избежать этого. Как?