2014-03-13 1 views
0

참고 :이 경우 필자는 일반적으로 필요한 것보다 적은 코드로 게임을 만들 수있는 spritebuilder라는 프로그램을 사용하고 있습니다. 모든 코드의 솔루션을 알고 있다면 모든 것을 자유롭게 공유 할 수 있습니다.스프라이트를 수직으로 목표로하는 C 스프라이트 빌더

또한이 질문에 대해서는이 링크의 튜토리얼 (Build Your Own Flappy Bird Clone)을 따랐습니다. "Loop the Ground"

그래서 내 문제는 여기에 있습니다. 현재 게임을하고있는 Im, 나는 내가 만든 캐릭터 스프라이트로 세로로 길게 스크롤하는 카메라를 만들었지 만 루프를 만들려면 특정 이미지가 필요합니다. 이미지가 화면의 맨 아래 부분을 벗어나면 무한히 화면 위쪽으로 돌아가고 싶습니다. 이를 위해 두 개의 동일한 이미지 (이 경우에는 나무 껍질)를 만들었습니다. 하나는 화면에 표시되고 다른 하나는 화면에 나타나지 않으므로 첫 번째 이미지가 화면을 떠날 때 두 번째 이미지가 화면을 벗어나면 두 번째 이미지가 대체됩니다 (자연스럽게). 이미지에 대해 두 개의 객체를 만들고 _ground1 및 _ground2라는 이름을 할당했으며 NSArray를 저장했습니다. (다소 혼란 스럽다면 위의 링크를 참조하십시오.) 다음은 나는 가지고있다 :

CCNode *_ground1; 
CCNode *_ground2; 
NSArray *_grounds; 

    for (CCNode *ground in _grounds) { 
    // get the world position of the ground 
    CGPoint groundWorldPosition = [_physicsNode convertToWorldSpace:ground.position]; 
    // get the screen position of the ground 
    CGPoint groundScreenPosition = [self convertToNodeSpace:groundWorldPosition]; 
    // if the left corner is one complete width off the screen, move it to the right 
    if (groundScreenPosition.y <(-1 * ground.contentSize.height)) { 
     ground.position = ccp(ground.position.x , ground.position.y + 2 * ground.contentSize.height); 
    } 

나는 이것을 시도 할 때 어떤 이유로 작동하지 않는다. 그러면 카메라가 수직으로 움직이게되지만 이미지가 반복되지 않습니다. 두 이미지가 화면 하단에 남겨지면 새로운 이미지가 대체되지 않습니다.

답변

0

위의 튜토리얼과 마찬가지로이 프로젝트를 완료했습니다. 그것은 잘 동작하지만 spritebuilder에서 변수를 설정하는 실수를 저 지르게됩니다. 위 코드에서 코드를 replice 코드로 사용하고 시도하십시오. 당신은 문제가 될지도 모르는 것만 둡니다.

if (groundScreenPosition.y <=(-1 * ground.contentSize.height)) { 
     ground.position = ccp(ground.position.x , ground.position.y + 2 * ground.contentSize.height); 
    } 
0

하기는 _ground1_ground2CCNode 객체를 사용하고 있습니다.

CCNode 개체에는 일반적으로 contentSize, they will return 0 unless you explicitly set them in SpriteBuilder가 없습니다.

CCSprite 개체가 SpriteBuilder이고 코드에 사용 중인지 확인하십시오. 또한

, 친절한 힌트로서 당신은 또한 리팩토링 (이름 변경) _treeBark1 예를 들면 treeBark2 등의 사용 사례에 더 의미있는 이름을 사용하여 스프라이트를 고려해야한다.