2011-12-15 2 views
0

두 개의 장면이 있습니다. 장면 A는 level 유형의 변수가 int 인 게임 장면입니다. B 클래스에서 변수를 가져 오려고합니다.다른 클래스의 변경 변수에 어떻게 액세스합니까? (예 : 레벨 수)

다음은 무엇입니까?

-------------------------------- - LevelDone.m ---------------------------------

HelloWorldLayer *object = [[HelloWorldLayer alloc]init]; 

     int pointsForZeroStars = [[requiredPoints objectAtIndex:0] integerValue]; 
     int pointsForOneStar = [[requiredPoints objectAtIndex:1] integerValue]; 
     int pointsForTwoStars = [[requiredPoints objectAtIndex:2] integerValue]; 
     int pointsForThreeStars = [[requiredPoints objectAtIndex:3] integerValue]; 
     NSLog(@"HEALTH = %d",object.health); 
     CCSprite *levelDoneWindow;   
     if (object.health < pointsForZeroStars){ 
      NSLog(@"should be 0 stars"); 
      levelDoneWindow = [CCSprite spriteWithFile:@"leveldonescreen0stars.png"]; 
     } 

NSLog는 100 health, 실제로 내가 LevelDone 장면 호출하기 위해 pushscene 전화 게임 클래스에서 100

보다 작은 무언가이다 :

----------------------------- HelloWorldLayer.m (게임 장면) ------------ -------------------------

else{ 

    [[CCDirector sharedDirector] pushScene:[LevelDone node]]; 
    [self generateLevelFromPlist:level]; 


} 

-generateFromPlist 방법은 100 건강을 재설정하지만 그것은 확실히 NSLog 방법 후 호출 내 LevelDone.m 클래스에서 그럼에도 불구하고 health이 100이라는 것을 인쇄합니다.

이 변수의 값을 올바르게 검색하려면 어떻게해야합니까?

+0

에 어떤 장면 게임을 통해 "지속 없다"합니다 'health? '오류는 여기에 나와있는 코드에는 없지만 HelloWorldLayer 클래스에있을 가능성이 큽니다. –

+0

위대한/나쁜 소리! 'pushScene' 메소드가 모든 선택자와 메소드를 멈추지 않아야합니까? 1 초 간격으로 실행되는 셀렉터가 있습니다. 그러나 그것은 단지 건강을 감소시킵니다. 사실 다음의'[self generateLevelFromPlist : level];'은 다시 100으로 설정합니다. –

답변

0

글로벌 값을 관리하려면 싱글 톤을 사용하십시오.

http://getsetgames.com/2009/08/30/the-objective-c-singleton/

기본적으로, 당신은 싱글 톤 클래스의 속성을 만들 수 있으며, 상관없이 어디의 값을 업데이트/설정하는 등

+0

좋습니다 ... 고맙습니다 ... 아마도 좋은 접근 방법 일 것입니다. 하지만 정확히 어떻게해야합니까? 이 싱글 톤은 내'game' 클래스에서 변화하는'health' 변수를 저장할 수 없습니다. 맞습니까? –

+0

물론 가능합니다. 값을 100에서 50으로 변경하면 물론 50을 영원히 유지합니다. 물론 다시 변경해야합니다. 아무것도 초기화되지 않습니다. – Voldemort

+0

예. 그렇지만 게임 클래스에서 가져와야합니다. 어쨌든 저는 그렇습니까? 그래서 그것이 바뀌면 내 싱글 톤 수업에서 그렇게 될거야 ... 아니면 내가 뭔가를 오해 했니? –

0

HelloWorldLayer의 health 속성이 실제로 올바르게 업데이트되고 있습니까? 그렇다면 HelloWorldLayer 내에서 변경하는 변수가 액세스중인 속성과 같지 않다는 오류가 제공된 코드 자체에 나타나지 않으므로 의심 스럽습니다 (다시 말하면 추측합니다.) object.health과 함께 - 범위 문제가 여기에 있습니다 (즉, 셀렉터가 로컬 변수 health 변수에 영향을 미치지 만 인스턴스 변수 자체에는 영향을 미치지 않음).

+0

레벨 변수를 설정하려고해도 작동하지 않습니다. 어쩌면 다시 불려지는 끔찍한 사이클 일 수도 있고 끔찍한 일을 할 수도 있습니다. 지금 당장 필사적입니다! –

+0

글로벌 변수로만 사용되므로 건강의 로컬 변수가 없습니다 ... –

관련 문제