Спрайт Cocos2D ограничен экраном - PullRequest
1 голос
/ 22 марта 2011

У меня проблема с Cocos2D. Я пытаюсь сделать спрайт подвижным на экране (что я смог сделать), но не позволяю ему обрезаться по краю экрана.

Если я прав, спрайты импортируются в слой в виде прямоугольников (spriteWithFile: @ "filename.ext" rect: CGRectMake (0, 0, X, Y);).

Единственное, что мне удалось выяснить, - это настроить мой код так, чтобы он определял, вышел ли прямоугольник спрайта за пределы "фонового" слоя, и соответствующим образом отрегулируйте его, если это так.

Это то, что у меня пока есть, но, похоже, оно работает неправильно:

- (void)panForTranslation:(CGPoint)translation {    

    CGSize winSize = [CCDirector sharedDirector].winSize;

    float maxX = winSize.width - selSprite.contentSize.width/2;
    float minX = selSprite.contentSize.width/2;
    float maxY = winSize.height - selSprite.contentSize.height/2;
    float minY = selSprite.contentSize.height/2;

    if (selSprite.position.x > maxX)
    {
        selSprite.position = ccp(maxX, selSprite.position.y);
    }
    else if (selSprite.position.x < minX)
    {
        selSprite.position = ccp(minX, selSprite.position.y);
    }   

    if (selSprite.position.y > maxY)
    {
        selSprite.position = ccp(selSprite.position.x, maxY);
    }
    else if (selSprite.position.y < minY)
    {
        selSprite.position = ccp(selSprite.position.x, minY);
    }

    CGPoint newPos = ccpAdd(selSprite.position, translation);
    selSprite.position = newPos;

}

Есть ли что-то совершенно очевидное, чего мне не хватает? Мои спрайты продолжают уходить за пределы экрана, если я их перетаскиваю, и я не могу понять это ради своей жизни.

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Попробуйте:

float maxX = winSize.width - selSprite.contentSize.width/2;
float minX = selSprite.contentSize.width/2;
float maxY = ...;
float minY = ...;

if (selSprinte.position.x > maxX)
{
    selSprite.position = ccp(maxX, selSprite.position.y);
}
else if (selSprinte.position.x < minX)
{
    selSprite.position = ccp(minX, selSprite.position.y);
}


if (selSprinte.position.y > maxY)
{
    selSprite.position = ccp(selSprite.position.x, maxY);
}
else if (selSprinte.position.y < minY)
{
    selSprite.position = ccp(selSprite.position.x, minY);
}

и добавьте тот же код для y.

0 голосов
/ 12 июня 2013

У меня есть спрайт, размер которого больше размера экрана. Я использовал это:

node.position = CGPointMake(MIN(MAX(size.width  - node.contentSize.width /2,node.position.x), node.contentSize.width  / 2),
                            MIN(MAX(size.height - node.contentSize.height/2,node.position.y), node.contentSize.height / 2));

Используя этот код, мой угол спрайта находился либо за пределами экрана, либо по краю экрана, что помогло мне увидеть мое полное изображение, прокрутив его.

Здесь:

node = CCSprite
size = [[CCDirector sharedDirector] winSize]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...