不太清楚这个情况,请另外发个帖子说明下吧
如何控制,就类似你们在button内的实现.用event.stopPropagation();即可。
你们在最上层中的判断不也是通过这个布尔类型判断是否要停止
谢谢反馈,这块确实应该统一一下
@jareguo @524277159 这是代码理解问题,他们的处理是一样的逻辑,都不会传给兄弟节点,只会冒泡给父亲节点
首先说明一下,旧的 Cocos2d 事件系统(cc.eventManager)中有一个 stopPropagation 的接口,但是实际上并不是阻止冒泡,而是阻止事件的继续派发,这是我们的命名有问题,由于在旧的系统中,没有事件 hit test,所以无法判断事件归属,也没有做到真正的冒泡,如果不 stopPropagation,实际上会继续派发给其他所有的监听器(包括兄弟节点和父亲节点)。在 Cocos Creator 中,为了纠正概念,实现真正的捕获冒泡事件模型,我们隔离了 cc.eventManager,这也是为什么我们不希望用户继续使用它,做了两个重要的改动:
- 离散事件派发,从一个集约化的派发改为了所有节点(cc.EventTarget 对象)都可以派发
- 节点对象的 hit test,以保障可以确定事件归属,并实现捕获冒泡事件模型,这也是为什么兄弟节点之间互相派发无法实现的根本原因,因为一个 touch / mouse 事件只能归属于一个节点
现在,我来解释一下 touch 和 mouse 事件处理器的实现差异,你看到的代码是对旧的 cc.eventManager 监听机制的封装,所以 mouseUpHandler 中的 stopPropagation 实际上是阻止 eventManager 的继续派发(给所有其他监听了的节点)。而 mouseUp 事件的捕获冒泡过程发生在
// 允许冒泡
event.bubbles = true;
// 完整的捕获冒泡派发流程
node.dispatchEvent(event);
在 touchStartHandler 中你也可以看到一样的派发逻辑,但是你看不到 stopPropagation 的原因是不需要这样做,因为我们在 hitTest 成功的情况下 return true,来告知 eventManager touch 触点的归属了,一个触点一旦归属于一个节点,就不会派发给其他监听器。所以不需要 stopPropagation 来阻止 eventManager 的派发,这一切都发生在 eventManager 的内部逻辑中。
这里揭示了 touch 和 mouse 的一个核心区别:
touch 触点有归属,而 mouse 事件没有归属。
总之,目前 touch 和 mouse 对于冒泡的处理逻辑都是完全一致的,具体你的需求如何实现你可以参考一下我的解释
1.7正式版是所有版本里面最难用的一版(点击节点属性面板不切换!),换个1.7.2试试看…
```
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(82) Android NDK: Support for these ABIs will be removed in a future NDK release.
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
```
1.7.0以上版本,windows 7 clean或者build提示这个错误,有影响吗?
cocos都融天使轮了,怎么能离职
我猜他们是集体出去泡妞了.
融资第一波先去度假,666
重新构建,增加了。
- (BOOL)prefersHomeIndicatorAutoHidden {
return YES;
}
可以了。
mac 1.7.2beta1, 自定义引擎用的1.7.1分支
调用node.schedule方法 会报错.
TypeError: scheduler.isTargetPaused is not a function. (In ‘scheduler.isTargetPaused(this)’, ‘scheduler.isTargetPaused’ is undefined), location: src/jsb_polyfill.js:8980:48
STACK:
schedule@src/jsb_polyfill.js:8980:48
看jsb_polyfill.js报错位置的截图:
我看了下 isTargetPaused方法 并没有js的定义, 也没有js-binding的实现.
这是 什么问题
自定义引擎请用 v1.7-release 分支
使用 自己实现的Node会报错.
我们自己实现了 一个c++的Node 继承自, CCNode, 执行过js-binding绑定了.
现在js那边把他创建成sgNode, 会报错:
ERROR: TypeError: sgNode.setColor is not a function. (In ‘sgNode.setColor(node._color)’,
‘sgNode.setColor’ is undefined), location: src/jsb_polyfill.js:10919:26
STACK:
_appendSgNode@src/jsb_polyfill.js:10919:26
__preload@src/jsb_polyfill.js:10903:29
anonymous
invoke@src/jsb_polyfill.js:16489:23
activateNode@src/jsb_polyfill.js:16582:32
_activate@src/jsb_polyfill.js:6493:50
runSceneImmediate@src/jsb_polyfill.js:30542:28
setColor是CCNode的方法, 这个 方法 也要在子类中 单独实现吗
知道问题了,
在AppDelegate.cpp里面
自己定义的register_xxx 都有放到 jsb_register_all_modules()后面执行.
否则__jsb_cocos2d_Node_proto 这个对象是空的
1.6时代就有这个bug
想升级到1.7 下载了一下 1.7.2beta.1版本
以前的 constructor 问题还是调用两次
就用console.err() 进行打印定位到引擎代码块 如图
看到创建构造了两次 一次是绑定@property的 我找到运行文件 注释掉就不会调用两次了
找到引擎代码 CCClassDecorator.js 198行 仔细看了一下 确实是绑定@property的
// CCClassDecorator.js
// member variables
var defaultValue = undefined;
var isDefaultValueSpecified = false;
if (desc) {
// babel
if (desc.initializer) {
// @property(...)
// value = null;
defaultValue = getDefaultFromInitializer(desc.initializer);
isDefaultValueSpecified = true;
}
else {
// @property(...)
// value;
}
}
else {
// typescript
var actualDefaultValues = cache.default || (cache.default = extractActualDefaultValues(ctor));
if (actualDefaultValues.hasOwnProperty(propName)) {
// @property(...)
// value = null;
defaultValue = actualDefaultValues[propName];
isDefaultValueSpecified = true;
}
else {
// @property(...)
// value;
}
}
在项目中在构造中 使用@property进行绑定控件 编辑器中查看根本没有显示这个属性
图片:
#麻烦引擎组大大看看那段代码是否多余 附上测试代码TestPro.rar (207.5 KB)
不是说过段时间就发布1.7.1版本的么,都去度假了?
你好,构造确实会进行两遍,这个会有影响吗?这个是设计的一部分,不算是 bug 吧。
你后面那个截图中的红框部分,我看不懂,怎么会在构造参数里调用 property decorator?