2010-07-27 45 views
9

Tôi phải thiếu điều gì đó!Cocos2d: Hình chữ nhật chữ nhật màu rắn?

Tôi muốn tạo một CCSprite hình chữ nhật vững chắc với màu nền được khởi tạo thành giá trị RGB cụ thể. Tôi đã xem xét tất cả các tài liệu và không thể tìm thấy bất cứ điều gì.

Có cách nào để khởi chạy nền của CCSprite thành màu cụ thể không? Tôi không muốn phải bao gồm một màu PNG rắn cho mỗi màu sắc mà tôi sẽ cần.

Trợ giúp!

Trả lời

9

CCSprite có một tài sản color loại ccColor3B:

- (ccColor3B) color [read, assign] 
RGB colors: conforms to CCRGBAProtocol protocol  

Definition at line 145 of file CCSprite.h. 

Nguồn: CCSprite tham khảo.

Bạn có thể dễ dàng xây dựng một cấu trúc ccColor3B sử dụng ccc3():

ccc3(const GLubyte r, const GLubyte g, const GLubyte b) 

tham khảo: ccColor3B tham khảo.

+6

Justin, cảm ơn đó là những gì tôi đang làm ... mẹo bổ sung tất nhiên là thiết lập textureRect đúng cách !!! – poundev23

+0

Cảm ơn @ poundev23, đó là những gì tôi đang tìm kiếm – aiham

+0

Cẩn thận, điều này dường như không hoạt động trong các chủ đề không đồng bộ. – GoldenJoe

5

Tôi tìm thấy câu trả lời tại cocos2d cookbook. Các mã sau đây được bắt nguồn từ cuốn sách của chap 1, đó là miễn phí để xem trước.

-(CCSprite *) rectangleSpriteWithSize:(CGSize)cgsize color:(ccColor3B) c 
{ 
    CCSprite *sg = [CCSprite spriteWithFile:@"blank.png"]; 
    [sg setTextureRect:CGRectMake(0, 0, cgsize.width, cgsize.height)]; 
    sg.color = c; 
    return sg; 
} 

Có, điều này vẫn yêu cầu tệp hình ảnh bên ngoài. Nhưng với 1x1 tiny 'blank.png' này, bạn có thể tạo ra các hình chữ nhật hình chữ nhật màu với kích thước và màu tùy ý.

+2

cho những hình ảnh bên ngoài –

21

Làm điều đó bằng mã! nếu bạn không muốn gây rối với các tệp hình ảnh, dưới đây là phương pháp của bạn:

- (CCSprite*)blankSpriteWithSize:(CGSize)size 
{ 
    CCSprite *sprite = [CCSprite node]; 
    GLubyte *buffer = malloc(sizeof(GLubyte)*4); 
    for (int i=0;i<4;i++) {buffer[i]=255;} 
    CCTexture2D *tex = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB5A1 pixelsWide:1 pixelsHigh:1 contentSize:size]; 
    [sprite setTexture:tex]; 
    [sprite setTextureRect:CGRectMake(0, 0, size.width, size.height)]; 
    free(buffer); 
    return sprite; 
} 

Sau đó, bạn có thể đặt màu, kích thước và độ mờ khi cần. ;)

+1

Đối với những người sử dụng làm việc với bộ đếm đột biến (đó là cocos2d-x): https://gist.github.com/Mazyod/208e5fb2d7a56290a261 – Mazyod

3

Tôi chưa bao giờ có CCSprite hoạt động như thế. Tôi chỉ sử dụng CCLayerColor.

CCLayerColor* layercolorHalftransparentred = [CCLayerColor layerWithColor:ccc4(255, 0, 0, 128)]; 
0

Đối với bất kỳ ai ngại về câu hỏi này (như tôi); mã từ Matjan dường như không còn hoạt động trên coco 2d 3.x. Xem bên dưới để biết phiên bản thay đổi phù hợp với tôi:

+ (CCSprite*)blankSpriteWithSize:(CGSize)size 
{ 
    GLubyte *buffer = malloc(sizeof(GLubyte)*4); 
    for (int i=0;i<4;i++) {buffer[i]=255;} 
    CCTexture *tex = [[CCTexture alloc] initWithData:buffer pixelFormat:CCTexturePixelFormat_RGBA8888 pixelsWide:1 pixelsHigh:1 contentSizeInPixels:size contentScale:1]; 
    CCSprite *sprite = [CCSprite spriteWithTexture:tex rect:CGRectMake(0,0,size.width,size.height)]; 
    free(buffer); 
    return sprite; 
} 
Các vấn đề liên quan