2011-03-21 4 views
1

Cocos2D에 문제가 있습니다. 스프라이트를 화면에서 움직일 수있게하려고하는데, 스크린의 가장자리가 잘리지 않도록하십시오.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; 

} 

있습니까 :

이것은 내가 지금까지 가지고 있지만 제대로 작동하지 않는 것 무엇인가? 드래그하면 내 스프라이트가 화면에서 계속 이동하며 나에게는 내 삶에 대해 알 수 없습니다.

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에 대해 동일한 코드를 추가

답변

2

이보십시오.

+0

I 오류 받고 있어요 ('CGSize이'라는 이름의 멤버가없는 'X') 내가 제 1 및 제 2 라인에서 빌드 할 때. 이 줄을 메서드 (CGSize winSize = [CCDirector sharedDirector] .winSize;) 맨 위에 추가하여 빌드를 허용합니다. 나는 X 또는 Y로 스프라이트의 contentSize를 정의하지 않았기 때문에 문제가 있다고 생각한다. 창과 같은 방법으로 그렇게 할까? (CGSize selSprite = [CCDirector sharedDirector] .selSprite;) – John

+0

@ 존 : 내 신비. CGSize에는 width 및 height라는 속성이 있습니다. 나는 대답을 편집했다 – Andrew

+0

그 위대한 작품, 감사합니다! 필요한 경우 Y 좌표 (높이를 변경하고 X를 Y/그 반대로 변경)를 사용하여 동일한 작업을 수행했지만 스프라이트를 화면의 위쪽이나 아래쪽으로 이동하면 (y 코드의 경우) 지연됩니다 가장자리 반대쪽 또는 화면의 다른 쪽 끝까지 반복합니다. 나는 원래 코드를 편집했다. – John

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] 
관련 문제