2012-08-29 3 views
1

안녕하세요 얘들 아, 6 스프라이트를 만들고 균일하게 간격을 띄우고 책에서 가져온 코드를 편집했지만 현재 스프라이트를 균일하게 배치해야하는 부분에 붙어 있습니다.int를 for 루프에서 xcode의 메서드로 구문 분석하는 방법은 무엇입니까?

[groundNode setPosition:CGPointMake(45, 20)]; 

여기서 6 개의 스프라이트를 모두 쌓아 올리니까?

[groundNode setPosition:CGPointMake(45*x, 20)]; 

여기서 x는 for 루프에서 가져온 int입니다. 내 코드가 맨 아래에 나열됩니다. 정말 고맙습니다!! , createGround에이어서

-(void) createGroundWithOffsetIndex: (int) offsetIndex { 
-(void) resetGround: (CCNode *) node withOffsetIndex: (int) offsetIndex { 

을 통과 :

[self resetGround:groundSprite withOffsetIndex: offsetIndex]; 

를 루프에서 전달할

-(id)init{ 
    self = [super init]; 
    if(self !=nil){ 
     for(int x=0;x<6;x++){ 
      [self createGround]; 
     } 
    } 
    return self; 
} 

-(void) createGround{ 
    int randomGround = arc4random()%3+1; 
    NSString *groundName = [NSString stringWithFormat:@"ground%d.png", randomGround]; 
    CCSprite *groundSprite = [CCSprite spriteWithFile:groundName]; 
    [self addChild:groundSprite]; 
    [self resetGround:groundSprite]; 
} 

-(void) resetGround:(id)node{ 
    CGSize screenSize =[CCDirector sharedDirector].winSize; 
    CCNode *groundNode = (CCNode*)node; 
    [groundNode setPosition:CGPointMake(45, 20)]; 

} 

답변

1

1 단계는 offsetIndex 매개 변수를 사용하는 이러한 방법을 구축하는 것이다 :

for(int x=0;x<6;x++){ 
    [self createGroundWithOffsetIndex:x]; 
}  

그리고 의미에 의해 오프셋()가 0에서 시작하기 때문에), +1주의 (

[groundNode setPosition:CGPointMake(45 * offsetIndex+1, 20)]; 

일부 노트 : withOffsetIndex :) :

    마지막으로, 코드의 비트는 당신이 (resetGround 내부에서 사용하는 줄 알았어요
  • 여기에 얼마나 많은 합격이 필요한지 신중하게 고려하고 개선 된 아키텍처에 대해 생각해보십시오. 동일한 이미지를 바둑판 식으로 배열하는 경우 createGround가 CGRect를 가져 와서 해당 영역을 채우도록해야합니다.

  • 이것은 가로 전용입니다. CGPoints (또는 유사한 {x, y} 구조체)를 offsetIndex로 전달하는 연습으로 남겨 둡니다.

  • 주조 패턴에 관한 경계선이 있습니다. 왜 그것을 ID로 전달한 다음, 또 다른 유형으로 들어 왔을 때 다른 지역 변수로 캐스팅해야합니까? 나는 그걸로 생각할 것입니다 ...

+0

정말 고마워요! 예, 나는 코드를 편집 한 후 불필요한 전달이 있었음을 알고 변경했습니다. – user1632140

관련 문제