我用的是2.1版本的cocosbuilder,然后引擎是2.0.4版本的。在win32下用vs2010调试。
在cocosbuilder里面编辑好了场景之后,对某一个Layer设置了isTouchEnabled为true。但是在调试的时候,解析isTouchEnabeld这个属性,代码会到这里执行,
case kCCBPropTypeCheck:
{
bool check = this->parsePropTypeCheck(pNode, pParent, pCCBReader, propertyName->getCString());
if(setProp)
{
this->onHandlePropTypeCheck(pNode, pParent, propertyName, check, pCCBReader);
}
break;
}
然后这里的setProp在前面被设置为了false: bool setProp = false;
int platform = pCCBReader->readByte();
if(platform == kCCBPlatformAll)
{
setProp = true;
}
#ifdef __CC_PLATFORM_IOS
if(platform == kCCBPlatformIOS)
{
setProp = true;
}
#elif defined(__CC_PLATFORM_MAC)
if(platform == kCCBPlatformMac)
{
setProp = true;
}
我在调试时得platform这个值为1,所以if语句中的代码没有执行。这个枚举变量的定义如下:
enum {
kCCBPlatformAll = 0,
kCCBPlatformIOS,
kCCBPlatformMac
};
也就是说:setProp 这个属性只有在mac下调试时才会被置为true。然后后面的
this->onHandlePropTypeCheck(pNode, pParent, propertyName, check, pCCBReader);这条语句才能得以执行。
然后这就引出一个问题,isTouchEnabled这个属性是一个特殊的属性么?为什么在win32下不能对其处理。
好,就算挪到mac上调试代码,那么下面这段代码:
void CCNodeLoader::onHandlePropTypeCheck(CCNode * pNode, CCNode * pParent, CCString * pPropertyName, bool pCheck, CCBReader * pCCBReader) {
if(pPropertyName->compare(PROPERTY_VISIBLE) == 0) {
pNode->setVisible(pCheck);
} else if(pPropertyName->compare(PROPERTY_IGNOREANCHORPOINTFORPOSITION) == 0) {
pNode->ignoreAnchorPointForPosition(pCheck);
} else {
ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
}
}
里面也没有对touchEnabled这个属性的设置啊。。。
求解释,这个属性在哪儿设置的,或者是其他的问题?
。。。我都嫌我自己太罗嗦了。。。{:soso_e136:}大侠们多多包涵