2012-01-13 2 views
2

저는 cocos2d를 사용 중이며 배열의 요소에 특정 문자열이 있는지보고 싶습니다. 여기에 CCSprite 객체 인 요소이다 :CCSprite 배열 요소에서 검색 목표 C (cocos2d)

<theSwift = 08A6EA70 | Rect = (0.00,0.00,27.00,75.00) | tag = 2 | atlasIndex = -1> 

나는 "괴물"과 괴물의 한 유형을 산란하고 얻을 태그 = 1 일부는 태그 = 2. 마지막 있는지 확인하는 것이 가능 얻을 몬스터가 위의 요소에서 태그 = 2를 얻었습니까?

+1

이것은 cocos2d를 사용합니까? 그렇다면'getChildByTag :'methinks를 사용할 수있다. –

+0

Youre right Richard iam! 그 대답을 고맙다. – Vorkit

답변

2

그 객체가 배열에있는 경우, 당신이 특정 태그를 사용하여 개체를 찾기 위해 NSPredicate을 사용할 수

NSArray *myArray; 

NSObject childWithTag = [[myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"tag == 2"]]] lastObject]; 

편집 : 예부터 OU는,적인 Cocos2D를 사용하는 자사의이 같은 간단 :

CCSprite *spriteWithTag = (CCSprite *)[myLayer childWithTag:2]; 
+0

자, 왜 투표가 실패 했습니까? 이 대답은 완벽하게 잘 작동합니까? –

+0

왜 내 대답을 왜곡 시켰습니까? 너의 것이 더 낫지 않다. 그것은 충분한 세부 사항을 가지고 있지 않기 때문에 더 나은 질문을 downvote – JonasG

+1

@ Maxner thats 낮은 타격 동생. 나는 그것이 틀린 답 이었기 때문에 답을 뽑았습니다. 그것은 나쁜 대답 이었기 때문이 아닙니다. 내 대답은 틀리지 않으므로 투표를하지 않아야합니다. 게다가 마지막으로 NSPredicate가 사용 된 것을 본 시간은 언제입니까? –

1

나는 당신의 질문을 이해 확실하지, 나는 그것을 비록 샷주지 : 선 위 단순히 NSString이며, 당신이 원하는 모든 tag = 2를 확인하는 경우

을, 당신은 할 줄 :

NSRange range = [theString rangeOfString:@"tag = 2"]; 
if (range.location != NSNotFound) { 
    // theString contains "tag = 2" 
} 
+0

다만 경고하지만'tag = 20','tag = 21' 등을 발견 할 수 있습니다. 만약 그 줄이 문자열이라면 그것을 수행하는 가장 좋은 방법은 그것을 사전이나 실제 객체로 파싱하는 것입니다. – cobbal

+0

@cobbal : 틀림없이 틀림 없습니다. 어쨌든 일반 문자열 대신에 이러한 것들을 표현하는 클래스를 사용할 것입니다 ... – DarkDust

+0

저는 그의 라인이 실제로 NSString이라고 생각하지 않지만, cocos2d의'CCSprite' 서브 클래스의 디버그 출력 가능성이 더 큽니다. –

0

당신이있는 NSArray에 대해 이야기하는 경우, 다음이 수행

당신은 if 문에서 containsObject를 사용할 수 있습니다

if ([array containsObject:@"tag = 2"]) { 
    //contains tag = 2 
} 

그것을 NSDictionary를 사용하는 것이 더 좋을 것입니다. 자신의 키에 대한 값을 설정하고, 값을 확인하기 위해 NSMutableDictionary에 setObject:forKey:를 사용하여 수행

[dict objectForKey:@"tag"] 

는 내가있는 NSDictionary 방법을 사용하는 것이 좋습니다 것입니다.

+0

그것은 작동하지 않을 것이다, 그의 출력을 봐라, 그 배열은 다수의'CCSprite' 객체들을 포함하고있다. 배열은'NSString'을 포함하지 않는다. 그러나, 당신이'NSPredicate' (내 대답과 같이)를 사용하도록 변경했다면 'tag == 2'를 사용할 수 있습니다. –

+0

@ RichardJ.RossIII 그는 NSArray가 아니라고 말하지 않았습니다 ... 투표 할 필요가 없습니다!? – JonasG

+0

그게 바로 NSArray를 사용하고 있지만 NSArray는 NSStrings가 아닌 CCSprite Objects로 채워져 있습니다 ... –

0

당신은 쉽게 어떤 계층의 자식을 얻기 위해이 방법

[layerName getChildByTag:<(NSInteger)>] 

를 사용할 수 있습니다.