2017-08-17 1 views
-2

finde ich folgenden Code nur mit onTouchBegan() und nicht onTouchMoved() und onTouchEnded()Was bedeutet die Rückkehr Bool in onTouchBegan bedeuten() von cocos2dx

auto listener = EventListenerTouchOneByOne::create(); 

listener->onTouchBegan = [=](Touch *touch, Event *event) { 
    CCLOG("on touch begain at (%f,%f)", touch->getLocation().x, touch->getLocation().y); 
    return false; // this will make following two events couldn't be fired. 
}; 
listener->onTouchMoved = [=](Touch *touch, Event *event) { 
    CCLOG("on touch moved at (%f, %f)", touch->getLocation().x, touch->getLocation().y); 
}; 

listener->onTouchEnded = [=](Touch *touch, Event * event) { 
    CCLOG("on touch ended at (%f,%f)", touch->getLocation().x, touch->getLocation().y); 
}; 

_eventDispatcher->addEventListenerWithFixedPriority(listener, 1); 

Der Grund, warum dies der Fall ist, dass die onTouchBegan zu einer Lambda-Funktion zugewiesen arbeiten das false nach dem Ändern dieser auf true, onTouchMoved und onTouchEnded wird wie erwartet ausgelöst.

Ich suchte rund um zu finden, was soll diese Rückkehr Flags tun? Könnte jemand helfen, das zu erklären?

Antwort

2

Die Dokumentation dies nicht sagen, aber die programmers-guide tut:

// trigger when you push down 
listener1->onTouchBegan = [](Touch* touch, Event* event) 
{ 
    // your code 
    return true; // if you are consuming it 
}; 

Also mit dem Bool können Sie das System feststellen, ob Sie die Touch-Ereignis oder nicht behandeln möchten.

auch: Sie brauchen keine Aufnahmen in Ihrem lambda besser so verwenden [] statt [=]

+0

Hallo, danke für die Erklärung, habe ich dieses Dokument gelesen und ich dachte, es war nur für die 'onTouchBegan' Aktion Ich hätte nie gedacht, dass es sich auf die anderen beiden Konsumenten im selben Listener auswirken sollte. Und ich bin mir der Verwendung von '[]' und '[=]' bewusst, aber danke, dass ihr daran erinnert habt, ich denke, es ist mehr wie eine Performance-Sache, oder? danke – armnotstrong

+0

Nicht nur Leistung, sondern auch Nutzung! Hängt davon ab, was Sie mit den Daten in der Lamda machen wollen. Ich bin mir jedoch nicht sicher, ob der Compiler die Erfassung optimiert, wenn Sie keine erfassten Objekte verwenden. –