我在Cocos2d-x中使用场景之间的转换遇到了(难以捕捉)问题。
基本上我通常会像这样淡出淡出:
exports.getRestaurantInNeighborhood = function(req, res, next) {
var geojsonPoint = {type: 'Point', coordinates: [-73.93414657, 40.82302903]};
Neighborhood.findOne({geometry: {$geoIntersects: {$geometry: geojsonPoint}}}, function(err, data) {
}).then(function(data) {
Restaurant.find({location: { $geoWithin: { $geometry: data.geometry } } })
.then(function(data) {
res.json(data);
}, function(err) {
next(err);
});
});
}
它看起来视觉上很好和正确,但我意识到它可能是危险的。如果我有一个从场景A到场景B的按钮,那么转换将按照上面的实现运行0.5秒。当点击ONCE并等待时,一切都会很好但是如果你点击非常快,即使第一次转换呼叫已经在进行中,也可以将该按钮的事件称为另一个时间。这可以,我认为在我的情况下,会导致各种奇怪和危险的事情。特别是对于经常使用协议/委托模式进行获取数据回调等的我。
我们想要做的是在转换开始时立即禁用场景A上的任何UI(至少可能更多?),以确保不会对同一个按钮或任何其他按钮进行其他推送,从而导致更多将启动过渡,可能会导致有害的事情。或者在cocos2d-x中应该有某种功能,如果一个转换已经在进行中,总是拒绝过渡...对我来说,这听起来像是最初想的最明智的事情。
我有什么遗漏或cocos2d-x中的转换真的这么危险吗?有人解决了这个问题?也许一种检查转换是否已经进行的方法是我解决这个问题的一种方法,而不是在cocos2d-x本身上进行攻击?
答案 0 :(得分:1)
虚拟cocos2d :: Node函数onEnterTransitionDidFinish()可用于取消注册Web请求的回调等。
假设您在转换期间未对任何应用程序逻辑使用cocos2d-x事件系统,您可能还会考虑禁用EventDispatcher来阻止触摸事件的传播。
您可以在触发后立即禁用该按钮。
或者你可能超级懒惰并创建一个Layer / TouchListener来在转换开始时拦截触摸(onEnterTransitionDidStart()),并将其与场景一起销毁:)