Đây là giải pháp của tôi để yêu cầu của bạn, cho tôi biết nếu nó hoạt động hay không
Tạo một Category trên CCMenu với Tên Transparent file CCMenu + Tranparent.h
#import "CCMenu.h"
@interface CCMenu (Transparent)
@end
file CCMenu + Tranparent .m
#import "CCMenu+Transparent.h"
#import "cocos2d.h"
@implementation CCMenu (Transparent)
-(CCMenuItem *) itemForTouch: (UITouch *) touch{
CGPoint touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
CCMenuItem* item;
CCARRAY_FOREACH(children_, item){
UInt8 data[4];
// ignore invisible and disabled items: issue #779, #866
if ([item visible] && [item isEnabled]) {
CGPoint local = [item convertToNodeSpace:touchLocation];
/*
TRANSPARENCY LOGIC
*/
//PIXEL READING 1 PIXEL AT LOCATION
CGRect r = [item rect];
r.origin = CGPointZero;
if(CGRectContainsPoint(r, local)){
if([NSStringFromClass(item.class) isEqualToString:NSStringFromClass([CCMenuItemImage class])]){
CCRenderTexture* renderTexture = [[CCRenderTexture alloc] initWithWidth:item.boundingBox.size.width * CC_CONTENT_SCALE_FACTOR()
height:item.boundingBox.size.height * CC_CONTENT_SCALE_FACTOR()
pixelFormat:kCCTexture2DPixelFormat_RGBA8888];
[renderTexture begin];
[[(CCMenuItemImage *)item normalImage] draw];
data[3] = 1;
glReadPixels((GLint)local.x,(GLint)local.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);
[renderTexture end];
[renderTexture release];
if(data[3] == 0){
continue;
}
}
free(data);
return item;
}
}
}
return nil;
}
@end
Điều này sẽ kiểm tra pixel để trả về CCMenuItem. của nó làm việc tốt ở đây .. cho tôi biết nếu bạn gặp phải bất kỳ vấn đề
-Paresh Rathod Cocos2d Lover
Nguồn
2014-03-06 16:58:27
Lớp trong suốt có rõ ràng hay là hình mẫu như bạn hiển thị ở trên? Ngoài ra bạn có biết làm thế nào để phát hiện các chạm trên bất kỳ khu vực nào? –
mô hình đại diện cho độ trong suốt. Có, tôi biết làm thế nào để phát hiện chạm, tôi chỉ cần kiểm tra nếu chạm là bên trong sprite.boundingBox ... những gì tôi cần là để biết nếu nó là bên trong boundingBox và là một điểm ảnh không minh bạch. – SpaceDog
Hmm, ok vì vậy những gì tôi đề nghị chỉ cần đặt một CCMenuItemImage trống trên phụ huynh không minh bạch và làm theo cách đó. Nếu không, bạn sẽ xử lý rất nhiều mã pixel mà bạn không muốn. –