2015-09-05 100 views
0

我正在使用cocos2d-x 3.7.1Cocos2d-x触摸事件坐标系

我在我的场景中有一个节点,我向该节点添加了子节点。 (HexField是节点的子类)

int rhombusSizeX = 1; 
int rhombusSizeY = 2; 

for (int y = 0; y < rhombusSizeY; ++y){ 
    for (int x = 0; x < rhombusSizeX; ++x){ 
     HexField* field = HexField::create(); 
     field->setPosition(Vec2(x*30 + y*15, y*30)); 
     field->setName("HexField " + to_string(x) + "," + to_string(y)); 

     auto listener = EventListenerTouchOneByOne::create(); 
     listener->setSwallowTouches(true); 
     listener->onTouchBegan = CC_CALLBACK_2(HexField::onTouchBegan, field); 
     listener->onTouchMoved = CC_CALLBACK_2(HexField::onTouchMoved, field); 
     listener->onTouchEnded = CC_CALLBACK_2(HexField::onTouchEnded, field); 
     Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, field); 

     this->addChild(field, 1); 
    } 
} 

如果只有一个HexField添加

int rhombusSizeX = 1; 
int rhombusSizeY = 1; 

HexField::onTouchBegantouch->getLocation()像预期的那样世界坐标报道。

如果有一个以上的HexField添加

int rhombusSizeX = 5; 
int rhombusSizeY = 5; 

touch->getLocation()返回坐标相对于“最后一个才补充说:” HexField在这种情况下将HexField 3,4

这是为什么?这是一个错误吗?

回答

0

我现在回答了一个问题。

这一切发生,因为我没有叫:

Director::getInstance()->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 

后:

Director::getInstance()->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
Director::getInstance()->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform); 
在我的绘制函数

看起来像错误升级到我的程序的其他部分导致一些奇怪的行为。