저는 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의 클래스 인 "사람"클래스를 가지고
이 또한주의 디버그 콘솔의 스크린 샷이다.
올바른 것을하고 있습니까? 제발 누구든지이 시스템을 구현하는 방법과 적절한 전화를 걸 수있는 방법과 방법을 알려줍니다.
: 답장을 보내 주셔서 감사 드리며이 주제에 대한 도움을 드리겠습니다. 말씀하신 내용을 시험하고 사이트에 등록됩니다. 답장의 두 번째와 세 번째 단락에서 말한 것을 이해하지 못합니다. 제발 좀 더 자세히 설명해 주시겠습니까? 아니면 당신이 말한 것을 설명하기 위해 코드 조각을 줄 수 있습니까? 감사합니다. – Zaki
초당 60 회라는 업데이트 방법을 사용하고 있다면 남자가 무언가와 충돌하고 있습니다. 업데이트 메소드 내에서 충돌을 확인할 때, 충돌하는 객체에서 멀리 떨어진 사람을 이동시키지 않으면 코드가 초당 60 번 호출됩니다. – rawbeans
세 번째 단락에서 나는 gameLayer.mm의 life 변수가 gameManager의 수명과 동일한 가치를 지니고 있는지 이중으로 확인했습니다. 즉, 당신은'[GameManager sharedGameManager] .lives'를 호출하여 그것을 초기화했습니다. kStateColliding if 문 외부에서'NSLog (@ lives lives : % d ", lives);를 추가하여 변수가 올바르게 설정하십시오. – rawbeans