Cocos2d CCLayer.scale - PullRequest
       6

Cocos2d CCLayer.scale

0 голосов
/ 15 марта 2012

Я делаю небольшую игру, в которой основной слой игрового процесса увеличивается и уменьшается в зависимости от ряда параметров. Это делается путем установки атрибута .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;, то кажется, что границы за пределами экрана также переместились «внутрь» экрана телефона. Я хочу избежать этого. Как?

1 Ответ

0 голосов
/ 19 марта 2012

После общения со многими разработчиками, проверка вне границ должна учитывать масштабирование, т.е.

newPosition.x > screenRect.size.width/CCLayer.scale
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...