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에 대해 동일한 코드를 추가
I 오류 받고 있어요 ('CGSize이'라는 이름의 멤버가없는 'X') 내가 제 1 및 제 2 라인에서 빌드 할 때. 이 줄을 메서드 (CGSize winSize = [CCDirector sharedDirector] .winSize;) 맨 위에 추가하여 빌드를 허용합니다. 나는 X 또는 Y로 스프라이트의 contentSize를 정의하지 않았기 때문에 문제가 있다고 생각한다. 창과 같은 방법으로 그렇게 할까? (CGSize selSprite = [CCDirector sharedDirector] .selSprite;) – John
@ 존 : 내 신비. CGSize에는 width 및 height라는 속성이 있습니다. 나는 대답을 편집했다 – Andrew
그 위대한 작품, 감사합니다! 필요한 경우 Y 좌표 (높이를 변경하고 X를 Y/그 반대로 변경)를 사용하여 동일한 작업을 수행했지만 스프라이트를 화면의 위쪽이나 아래쪽으로 이동하면 (y 코드의 경우) 지연됩니다 가장자리 반대쪽 또는 화면의 다른 쪽 끝까지 반복합니다. 나는 원래 코드를 편집했다. – John