Xcode Cocos2D精灵约束到屏幕

Xcode Cocos2D精灵约束到屏幕,xcode,ios,cocos2d-iphone,Xcode,Ios,Cocos2d Iphone,我对Cocos2D有问题。我试图让一个精灵在屏幕上移动(我已经做到了),但不要让它被屏幕边缘夹住 如果我是正确的,精灵将作为矩形(spriteWithFile:@“filename.ext”rect:CGRectMake(0,0,X,Y);)导入图层 到目前为止,我唯一能弄明白的事情是设置代码来检测精灵的矩形是否超出了“背景”层,如果超出了,则进行相应的调整 到目前为止,这就是我所拥有的,但它似乎工作不正常: - (void)panForTranslation:(CGPoint)translat

我对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;

}
-(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.xmaxY)
{
selSprite.position=ccp(selSprite.position.x,最大值);
}
else if(selSprite.position.y
有没有什么明显的东西我遗漏了?如果我拖动精灵,它们会一直从屏幕上移开,我一辈子都想不出来。

试试这个:

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);
}
float maxX=winSize.width-selSprite.contentSize.width/2;
float minX=selSprite.contentSize.width/2;
浮点最大值=。。。;
浮肉馅饼=。。。;
if(selSprinte.position.x>maxX)
{
selSprite.position=ccp(maxX,selSprite.position.y);
}
else if(selSprinte.position.xmaxY)
{
selSprite.position=ccp(selSprite.position.x,最大值);
}
else if(selSprinte.position.y

为y添加相同的代码。

我有一个比屏幕大的精灵。我用了这个:

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));
使用这段代码,我的精灵角要么在屏幕外面,要么在屏幕边缘,这有助于我通过滚动查看完整的图像

在这里:


当我在第一行和第二行上构建时,出现错误('CGSize'没有名为'x'的成员)。我在方法(CGSize winSize=[CCDirector sharedDirector].winSize;)的顶部添加了这一行,以允许它进行构建。我想问题是因为我没有在X或Y中定义精灵的contentSize,我会用与窗口相同的方式来定义吗?(CGSize selSprite=[CCDirector sharedDirector].selSprite;)@John:my mystake。CGSize具有名为width和height的属性。我编辑了答案,效果很好,谢谢!我在必要时对Y坐标做了同样的操作(将宽度更改为高度,将X更改为Y/反之亦然),但当我将精灵移动到屏幕的顶部或底部(对于Y代码),它们要么滞后于边缘,要么循环到屏幕的另一侧。我把我原来的代码编辑成现在的样子。@John:我已经编辑了我的答案。你应该独立地检查x和y。我把我的帖子更新为我开始工作的代码。错误来自于我最后两行的elseif{}语句,而不是一起在if循环之外。非常感谢安德鲁!
node = CCSprite
size = [[CCDirector sharedDirector] winSize]