Cocos Creator v1.6.0 内测版发布帖(8月11日更新 rc.1)

用1.6遇到这个问题 代码里随机出来的是整数 但是模拟器的editorBox显示出来的有2个小数点 并且原生包进行到这一步时直接崩溃 大大们有空看看?

最好提供一个 demo 吧,可能是你的代码问题。

你好…子龙…beta2什么时候发布.1.4的用1.6运行不了.

beta2 发布时间我也不是很清楚,会尽快发的。

这才是奇了怪了,我直接用帖子里上传的工程,构建后,在XCode和浏览器中运行,然后下面是结果
浏览器(Chrome 版本 59.0.3071.115(正式版本) (64 位))

iPad Air(iOS 版本 :10.3.2 (14F89))

XCode (Version 8.3.3 (8E3004b))控制台输出:
Success to load scene: db://assets/Scene/helloworld.fire
supportEmail:::::::::undefined
appId:::::::::undefined
supportEmail2:::::::::初始值aaaaaa
appId2:::::::::3333

Creator版本 CocosCreator_v1.5.2_2017070701
操作系统 :

ps:我上面说的初始值是在js文件中给属性赋的初值,不是在场景编辑器中修改。类似这种
@property({
default: 2,
displayName: ‘本应用ID2’
})
appId2: number = 3333;
当出现上面代码的矛盾情况时,编辑器和实际运行时,都会显示‘3333’,忽略了default的值,当然,我现在觉得这样的用法应该是不提倡的,或者说是错误的用法,应该在设置初值的时候,保证两者统一才对。

好的,我用真机查看看,你说是原生平台我就以为是模拟器预览时就能重现……

我这边模拟器的效果也和我的真机效果是一样的

这个是构建的选项

另外,我还发现,如果在编辑器中修改了值,那么浏览器和真机上效果就一致了,所以,我估计是不是property装饰器中default配置项的实现问题?
编辑器中修改了属性值:

浏览器效果

真机效果

@nantas

左1.5, 右1.6内测版
相同的场景, 不同版本打开, 浏览器预览的效果, 线条的透明度明显不同.
和ps对比效果 1.6是正确的, 请问是修复了哪项

使用@peoperty在creator.d.ts的第2个方法错,看下图,(采用第一个对象构建正常)

报错代码:

      @property( cc.RawAsset )
      manifestUrl: cc.RawAsset;

vscode 报错提示:

控制台报错信息:

file: ‘file:///Users/game/game-client/assets/script/HotUpdate.ts’
severity: ‘错误’
message: ‘Type ‘typeof RawAsset’ has no properties in common with type ‘{ type?: any; url?: typeof RawAsset; visible?: boolean | (() => boolean); displayName?: string; t…’.’
at: ‘6,15’
source: ‘ts’


本来想用对象方法的,如下:

      @property({ default: null, type: cc.RawAsset })
      manifestUrl: cc.RawAsset;

但他就会在编辑器里报错:Type Error

CCEventDispatcher.cpp: EventDispatcher::dispatchEventToListeners

    if (fixedPriorityListeners)
    {
        if (!shouldStopPropagation)
        {
            // priority > 0
            ssize_t size = fixedPriorityListeners->size();
            for (; i < size; ++i)
            {
                auto l = fixedPriorityListeners->at(i);

                if (l->isEnabled() && !l->isPaused() && l->isRegistered() && onEvent(l))
                {
                    shouldStopPropagation = true;
                    break;
                }
            }
        }
    }

    if (fixedPriorityListeners)
    {
        if (!shouldStopPropagation)
        {
            // priority > 0
            ssize_t size = fixedPriorityListeners->size();
            for (; i < size; ++i)
            {
                auto l = fixedPriorityListeners->at(i);

                if (l->isEnabled() && !l->isPaused() && l->isRegistered() && onEvent(l))
                {
                    shouldStopPropagation = true;
                    break;
                }
            }
        }
    }

这两段怎么看都是一样的,是不是合并的时候重复了 @panda

2赞

引擎中一段代码的迷惑,1.5.2和这一段有差异:

void EventDispatcher::forceAddEventListener(EventListener* listener)
{
	... ...
	
	// 这里如果listener->isPaused()为true, 下一句调用还有什么意义呢?
	// 是不是想判断:!listener->isPaused()
	if (!node->isRunning() && listener->isPaused())
	{
		listener->setPaused(true);
	}
}

1赞

原生环境socket.io的removeListener方法不可用怎么解决?

这个据说上次已经改了 代码合并 的有问题估计

1.5分支的代码是:

        if (!node->isRunning())
        {
            listener->setPaused(true);
        }

我也不知道怎么回事了。
@nantas @panda

1.5中没有这个了,为什么1.6中加回来了?

@nantas @panda

谢谢提醒,这是 merge 的时候没注意用旧代码覆盖了新代码导致的,已经修复啦

https://github.com/cocos-creator/cocos2d-x-lite/pull/716

下个版本会修复,谢谢反馈。你现在可以先用 @property({ default: null, url: cc.RawAsset }) 或者无视 @property(cc.RawAsset) 报错

好的~

初始值确实是拿不到的,如果我删掉了 App 组件再重新添加,会显示

但那样的话我浏览器也会显示成 undefined,而不是像你那样正常显示。我怀疑是有什么临时数据出错了或者你浏览器有缓存导致的差异。

default 现在只有在 reset 组件时才会用到,运行时用不到的,这是 TypeScript 语言的底层问题,暂时解决不了。如果用 JS 的 ES6 Classes 就不需要定义 default,所以没有这个问题。

我清除了浏览器缓存,按照你的操作方式,出现了你截图中的内容,不过还是有点奇怪的是,浏览器直接输出了undefined字符串,而真机上却是空白,不知道这是浏览器和真机本身的区别,还是什么其他的原因。

另外,想问一下,引擎小组目前以及以后的工作,会对ES6 Classes的支持更好些,TS只是顺带的,是这样么?

毕竟采用引擎推荐的使用方式,出错几率小,踩坑少,解决起来也比较快,不是么?