2011-03-21 43 views
1

我遇到了Cocos2D的问题。我试图在屏幕上移动一个精灵(我已经能够做到这一点),但是阻止它在屏幕边缘被剪辑。 (spriteWithFile:@“filename.ext”rect:CGRectMake(0,0,X,Y);)。如果我是正确的,则将sprite作为矩形导入到图层中。Cocos2D sprite受限于屏幕

到目前为止,我唯一能够弄清楚的是设置我的代码来检测精灵的矩形是否已经超出了“背景”层,并且如果它发生了相应的调整。

这是我迄今为止,但它似乎并没有被正确地工作:

- (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

试试这个:

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

我收到错误(“CGSize”没有名为成员“X”),当我建立在第一和第二线。我在方法的顶部添加了这行(CGSize winSize = [CCDirector sharedDirector] .winSize;)以允许它构建。我认为这个问题是因为我没有在X或Y中定义精灵的contentSize,我会以与窗口相同的方式吗? (CGSize selSprite = [CCDirector sharedDirector] .selSprite;) – John 2011-03-21 22:20:02

+0

@John:my mystake。 CGSize具有名为宽度和高度的属性。我编辑了答案 – Andrew 2011-03-21 22:36:42

+0

这很好,谢谢!我在Y坐标上做了同样的事情(改变宽度到高度,X到Y /反之亦然),但是当我将我的精灵移动到屏幕的顶部或底部(对于y代码)时,它们要么滞后靠着边缘,或者循环到屏幕的另一侧。我编辑我的原始代码到我现在拥有的。 – John 2011-03-21 23:34:32

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]