問題: 畫面縮放改變後 cc.EditBox 輸入區顯示位置異常
修正方式: 增加 Component 動態修正位置
const { ccclass, property, requireComponent } = cc._decorator;
@ccclass
@requireComponent(cc.EditBox)
export default class EditBoxFix extends cc.Component {
// 修正 EditBox 在網頁縮放後 輸入區顯示位置異常的問題
// 參考資料
// https://github.com/cocos-creator/engine/blob/2.2.0/cocos2d/core/components/editbox/CCEditBox.js
private canvasWidth: number = 0;
private canvasHeight: number = 0;
onLoad(): void {
this.canvasWidth = cc.game.canvas.width;
this.canvasHeight = cc.game.canvas.height;
window.addEventListener("resize", this.onResize);
window.addEventListener("orientationchange", this.onResize);
}
onDestroy(): void {
window.removeEventListener("resize", this.onResize);
window.removeEventListener("orientationchange", this.onResize);
}
private onResize = (e: Event): void => {
if (this.canvasWidth === cc.game.canvas.width
&& this.canvasHeight === cc.game.canvas.height) { return; }
this.resetSize();
}
public resetSize = (): void => {
this.canvasWidth = cc.game.canvas.width;
this.canvasHeight = cc.game.canvas.height;
let editBox: any = this.node.getComponent(cc.EditBox);
if (editBox == null) { return; }
let isFocused: any = editBox.isFocused();
if (editBox._impl) {
editBox._impl.clear();
} else {
return;
}
let EditBoxClass: any = cc.EditBox;
let impl: any = editBox._impl = new EditBoxClass._ImplClass();
impl.init(editBox);
editBox._updateString(editBox._string);
editBox._syncSize();
if (isFocused) { editBox.focus(); }
}
}
參考資料
GitHub cocos-creator
沒有留言:
張貼留言