效果图
展示状态:
点击后编辑状态:
在展示状态时,文字没有居中。
属性:
节点机构:
请问是哪里出了问题?
没有人遇到过吗?
引擎BUG,论坛有文档,你可以搜搜看
在3.8.5里修复了
最新版本是3.8.3,3.8.5是在哪里下载
不好意思我记错了,好像在3.8.3已经修复了。
3.8.3可以在dashboard下载
3.8.5还在开发中。。。
3.8.3没修复,你说的应该是3.8.4的测试版修复了
3.8.3应该是修复了,PR是提交到3.8.3里。3.8.3还有问题?
我是3.8.2,不好意思,我给记混了
我现在出现问题的就是3.8.3版本
不是吧?你方便弄个demo 么? 我看看
你是运行在web上嘛?可以进源码把里面的一个impl的值修改一下就行,我是3.72版本 发布的是移动端网页
web和各种小游戏平台,如何修改
我是3.8.3 web
console.log(this.editBox._impl)
是null
使用这样的写法,也没有起作用。
console.log(this.editBox.placeholderLabel.node.position)
console.log(this.editBox.textLabel.node.position)
this.editBox.placeholderLabel.node.position=new Vec3(100,100,0)
this.editBox.textLabel.node.position=new Vec3(100,100,0)
手动修复一下:
if (cc.VERSION.indexOf("3.8.1") > -1 || cc.VERSION.indexOf("3.8.2") > -1 && isHtml5) { //修复3.8.2 cc.EditBox 异常的问题. 官方3.8.3 才修复- cc.EditBox.prototype.onDestroy = function () { cc.director.off(cc.Director.EVENT_AFTER_UPDATE, this._afterUpdate, this); //修复可能会造成的crash问题 if (this._impl) { this._impl.clear(); } }; /**更新有错误, 这里重写*/ cc.EditBox.prototype.update = function () { }; /*用来处理 update 里面的错误,修复焦点显示错误的问题*/ //@ts-ignore cc.EditBox.prototype._afterUpdate = function () { if (this._impl) { this._impl.update(); this._impl.afterUpdate(); } }; //@ts-ignore cc.EditBox.prototype._init = function () { this._updatePlaceholderLabel(); this._updateTextLabel(); this._isLabelVisible = true; this.node.on(cc.NodeEventType.SIZE_CHANGED, this._resizeChildNodes, this); cc.director.on(cc.Director.EVENT_AFTER_UPDATE, this._afterUpdate, this); const impl = this._impl = new cc.EditBox._EditBoxImpl(); //这个类没有被导出,没办法直接重写,就在这里覆盖一下它的方法 //@ts-ignore impl.afterUpdate = function () { }; //@ts-ignore impl._resize = function () { if (this._delegate == null || this._delegate.node == null) { return; } this._delegate.node.hasChangedFlags = 1; this._forceUpdate = true; }; //空 impl.update = function () { }; //@ts-ignore impl.afterUpdate = function () { if (this._delegate == null || this._delegate.node == null) { return; } const node = this._delegate.node; if (!node.hasChangedFlags && !this._forceUpdate) { return; } this._forceUpdate = false; this._updateMatrix(); }; impl.init(this); this._updateString(this._string); this._syncSize(); }; }
我之前刚排查了类似的问题。就是游戏项目配置如果仅仅选择 适配宽度 或者 适配高度。并且,顶层的canvas里widget(完全撑开长宽的那个对齐组件)被删掉的话。会导致引擎层面的坐标计算整体出现错误。你可以看看你是不是这个问题。因为那个editbox的输入框,实际在web侧是一个input标签。位置是根据底层一些坐标变换计算的。(p.s.,这种配置(适配宽度/高度+删除canvas的widget),还会引发鼠标的getUILocation和通过camera计算得到的worldPos并不一致)
解决方法:要么不勾选适配的配置(默认保持了canvas的设计分辨率,但是有可能UI超出可见区域),要么适配宽度高度都勾选(有黑边),要么canvas里的widget保留(有可能导致一些布局超出预期)。
如果你不是这个问题,那我不知道。


