나는 내 게임 캐릭터를 나타내는 CCSpriteFrameCache를 사용하여 애니메이션 스프라이트를 가지고 있습니다. 이 스프라이트의 자식으로 텍스트 레이블을 추가하여 (동적) 문자 이름을 나타내려고하지만 'CCSprite가 동일한 텍스처 ID를 사용하지 않습니다'라는 문제가 발생합니다. 텍스트가 동적이기 때문에 캐릭터가 사용하는 스프라이트 시트에 텍스트를 포함 할 수 없습니다. 내 캐릭터에게이 텍스트 오버레이를 가져 오는 가장 좋은 방법은 무엇입니까?CCSpriteFrameCache로 애니메이션 스프라이트에 라벨 추가하기
1
A
답변
1
나는 이것을 위해 CCNode 파생물을 사용하는 경향이 있으며, RGBA 프로토콜도 구현합니다. 노드 내부에서 애니메이션을 재생하고 노드에 레이블을 추가 한 다음 (상태 표시 줄과 같은 다른 노드와 마찬가지로) 노드를 이동하거나 보이게하거나 보이지 않게 페이드 인 및 페이드 아웃과 같은 애니메이션을 사용할 수 있습니다 전체 내용.
0
상속을 통한 합성은이 컨텍스트에서 true입니다.
내 코드는 스스로 구현할 수있는 템플릿이어야합니다.
@interface Player : CCNode
+ (instancetype)playerWithName:(NSString*)name sprite:(CCSprite*)sprite
- (id)initWithName:(NSString*)name sprite:(CCSprite*)sprite;
@property (nonatomic, retain) CCSprite* sprite;
@property (nonatomic, copy) NSString* name;
@end
@implementation Player {
BOOL _nameLabelAdded;
BOOL _spriteAdded;
}
#define LABEL_NAME_TAG 0e1
@synthesize sprite = _sprite, name = _name;
+ (instancetype)playerWithName:(NSString*)name sprite:(CCSprite*)sprite {
return [[[self alloc] initWithName:name sprite:sprite] autorelease];
}
- (id)initWithName:(NSString*)name sprite:(CCSprite*)sprite {
if (self = [super init]) {
//NOT TESTED..
self.name = name;
self.sprite = sprite;
}
return self;
}
- (void)setSprite:(CCSprite*)theSprite {
if (theSprite != _sprite) {
[_sprite release];
_sprite = [theSprite retain];
if (!_spriteAdded) {
/* initialize position etc here */
[self addChild:_sprite];
_spriteAdded = YES;
}
}
}
- (void)setName:(NSString*)theName {
if (![_name isEqualToString:theName]) {
[_name release];
_name = [theName copy];
if (![_name isEqualToString:@""]) {
CCLabelTTF* name_label;
if (!_nameLabelAdded) {
name_label = [CCLabelTTF labelWithString:_name];
/* init the name_label */
[self addChild:name_label z:1 tag:LABEL_NAME_TAG];
_nameLabelAdded = YES;
} else {
name_label = (CCLabelTTF*)[self childWithTag:LABEL_NAME_TAG];
name_label.text = name;
}
}
}
}
@end
0
마지막으로 출시 된 게임에서 이러한 상황이 발생했습니다.
이 문제를 해결하는 가장 좋은 방법은 부모 노드를 만들고 레이블과 스프라이트를 자식으로 추가하는 것입니다. 서로 간섭하지 않고 두 위치의 위치를 조정할 수 있기 때문에 주로 노드를 개별적으로 관리하는 것이 좋습니다.
노드 계층 구조 :
- Node parent
- Sprite with CCSpriteFrameCache
- Label
관련 문제
- 1. Cocos2d에서 스프라이트에 깊이 추가하기
- 2. 애니메이션 스프라이트에 CGRect가 0입니다.
- 3. 움직이는 스프라이트에 애니메이션 적용
- 4. 스프라이트에 프로그래밍 방식으로 애니메이션 적용
- 5. iOS의 스크롤보기에 라벨 추가하기
- 6. WinForm에 많은 라벨 추가하기
- 7. 버튼에 라벨 추가하기
- 8. 라벨 텍스트를 함께 추가하기
- 9. Corona SDK의 라벨 애니메이션
- 10. 스퀘어 캐쉬 라벨 애니메이션
- 11. C# 유니티에서 2d 스프라이트에 속도 추가하기
- 12. Cocos2D : 다른 스프라이트에 대한 애니메이션 재사용
- 13. Xcode에서 스토리 보드에 라벨 추가하기
- 14. 격자에 선과 라벨 추가하기 [R]
- 15. 데이터 컨트롤에 라벨 컨트롤 추가하기
- 16. ScaleTransform WPF 애니메이션 추가하기
- 17. 동영상에 애니메이션 추가하기
- 18. 아약스에 애니메이션 추가하기
- 19. jQuery에 애니메이션 추가하기
- 20. 아이템에 CSS 애니메이션 추가하기
- 21. 다른 위치에있는 UICollectionView 셀에 라벨 추가하기 iOS
- 22. iPhone dev : 이미지에 겹쳐진 라벨 추가하기
- 23. COBOL에서 주소 라벨 프로그램에 헤더 추가하기
- 24. RecyclerView에 대한 개별보기 애니메이션 추가하기
- 25. RaphaelJS 토글 기능에 애니메이션 추가하기
- 26. 상태 간 UIButton에 애니메이션 추가하기
- 27. d3 인버트 버블 및 라벨 애니메이션
- 28. XNA 2D 카메라 - 애니메이션 스프라이트에 고정/센터링하는 방법?
- 29. Android OpenGL : 하나의 애니메이션 스프라이트에 여러 텍스처 사용
- 30. 너비 애니메이션을 cocos2D의 스프라이트에 추가