这个问题,估计只有 @panda 告诉你了。
我在1.7中的做法是:
se::ValueArray argArr;
argArr.reserve(1);
const std::string& eventName = event->getEventName();
if (eventName != Director::EVENT_AFTER_DRAW
&& eventName != Director::EVENT_AFTER_VISIT
&& eventName != Director::EVENT_AFTER_DRAW
&& eventName != Director::EVENT_AFTER_UPDATE
&& eventName != Director::EVENT_BEFORE_UPDATE)
{
se::Value arg1Val;
ok = native_ptr_to_seval<EventCustom>(event, &arg1Val);
SE_PRECONDITION2_VOID(ok, "EventListenerCustom::create callback: convert arg1 failed!");
argArr.push_back(std::move(arg1Val));
}
funcVal.toObject()->call(argArr, nullptr);
会去判断 Director::EVENT_, 如果是用户自定义的event,则回调给用户。
我们对 Director::EVENT_不传入EventCustom是因为creator内部并没有直接用到,所以性能考虑,防止生成新的EventCustom对象。