2011-03-21 117 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]