2015-09-05 97 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); 
在我的繪製函數

看起來像錯誤升級到我的程序的其他部分導致一些奇怪的行爲。