Cocos2D精灵限制在屏幕上

时间:2011-03-21 21:51:52

标签: xcode ios cocos2d-iphone

我遇到了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 个答案:

答案 0 :(得分:2)

试试这个:

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添加相同的代码。

答案 1 :(得分:0)

我有一个大小比屏幕尺寸大的精灵。我用过这个:

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]