2011-08-06 3 views
1

저는 cocos2d 및 box2d를 사용하여 실시간/점수 시스템을 구현하려고합니다. 내 몸은 내가 원하는대로 충돌하는 box2d 몸체입니다. 그러나 문제는 각 충돌에서 생명이 제거되거나 충돌의 특정 횟수 (예 : 3 번)가 지난 후 점수 시스템을 구현하려고 시도한 것입니다.) 게임은 멈춰야 만합니다. 이 경우에는 CCLOG에서 게임 관리자가 호출되었을 때 표시 할 메시지를 실제로 출력한다는 것을 알았지 만 그 이상한 일은 영원히 그것을 호출한다는 것입니다 (아래 디버깅 창 참고). 그것은 응용 프로그램을 시작할 때 장면에서 "man"객체를 완전히 제거합니다.cocos2d에서 생명/점수 시스템 구현

나는 .H 파일에 나는이

@interface GameManager : NSObject { 
    int lives; 
} 
-(void)removeLives : (int)val; 

을 선언하고 gameManager.m 파일에 내 주에서는이 방법

-(void)removeLives : (int)val 
{ 
    lives -=val; 
    CCLOG(@"YOU HAVE LOST A LIFE MAN"); 
} 

을 가지고 gameManager (싱글) 클래스가 업데이트 메서드의 gameLayer.mm 파일이 코드가 있습니다

그리고 life는 gameM에서 초기화됩니다. anager 초기화 방법에 따라서

-(id)init {              // 8 
    self = [super init]; 
    if (self != nil) { 
    // Game Manager initialized 
    CCLOG(@"Game Manager Singleton, init"); 
    lives = 3; 
} 

이것은 내가 Box2D의 클래스 인 "사람"클래스를 가지고

debug console screen shot

이 또한주의 디버그 콘솔의 스크린 샷이다.

올바른 것을하고 있습니까? 제발 누구든지이 시스템을 구현하는 방법과 적절한 전화를 걸 수있는 방법과 방법을 알려줍니다.

답변

1

[[GameManager sharedGameManager] removeLives : 1]에 대한 호출이 else (lives < = 0) 블록 내에 있습니다. 0보다 큰 숫자의 사람이 살 때만 호출해야합니다.

if (kStateColliding) 블록을 호출하지 못하도록 남은 사람이없는 경우 무언가를하고 싶습니다. 또한 충돌을 일으키는 객체에서 맨 위치를 재설정하여 하나의 "충돌"이 removeLives에 대한 여러 호출을 트리거하지 못하게 할 수도 있습니다.

여기서 gameLayer.mm에서 생명체를 선언하고 있습니까? 그것이 현재의 코드로 인해 0으로 초기화되거나 0으로 초기화되지 않거나 그 값을 다른 곳에서 변경하지 않는다면 현재의 코드에서 어떻게 설정 될지 알 수 없으므로 싱글 톤에 저장된 값으로 설정되어 있는지 확인하십시오.

나는적인 Cocos2D 포럼에서이 같은적인 Cocos2D 질문을 할 것입니다 :이 http://www.cocos2d-iphone.org/forum/

자주 분 내에,보다 신속하게 답변을 얻을 것이다.

+0

: 답장을 보내 주셔서 감사 드리며이 주제에 대한 도움을 드리겠습니다. 말씀하신 내용을 시험하고 사이트에 등록됩니다. 답장의 두 번째와 세 번째 단락에서 말한 것을 이해하지 못합니다. 제발 좀 더 자세히 설명해 주시겠습니까? 아니면 당신이 말한 것을 설명하기 위해 코드 조각을 줄 수 있습니까? 감사합니다. – Zaki

+0

초당 60 회라는 업데이트 방법을 사용하고 있다면 남자가 무언가와 충돌하고 있습니다. 업데이트 메소드 내에서 충돌을 확인할 때, 충돌하는 객체에서 멀리 떨어진 사람을 이동시키지 않으면 코드가 초당 60 번 호출됩니다. – rawbeans

+0

세 번째 단락에서 나는 gameLayer.mm의 life 변수가 gameManager의 수명과 동일한 가치를 지니고 있는지 이중으로 확인했습니다. 즉, 당신은'[GameManager sharedGameManager] .lives'를 호출하여 그것을 초기화했습니다. kStateColliding if 문 외부에서'NSLog (@ lives lives : % d ", lives);를 추가하여 변수가 올바르게 설정하십시오. – rawbeans