-
Creator 版本:2.0.9
-
目标平台: web
-
详细报错信息,包含调用堆栈:无
-
重现方式:我的测试:2万个,随机移动的方块,方块身上挂有 Sprite组件,BlockInputEvent组件,自定义运动组件
-
之前哪个版本是正常的 :
-
手机型号 :
-
手机浏览器 :
-
编辑器操作系统 :window
-
编辑器之前是否有其它报错 :无
-
出现概率:100%
-
额外线索:
我的组件的代码:
import { CompType } from “…/CompType”;
const { ccclass, property } = cc._decorator;
@ccclass
export default class CCCMoveComp extends cc.Component {
type: number = CompType.MOVE;
/**
* 速度
*/
@property
speed: number = 10;
dirXY = { x: 0, y: 0 };
speedX: number = 0;
speedY: number = 0;
setRandomXY() {
let randomDirX = Math.round(Math.random() * 1000) / 1000;
let randomDirY = Math.round(Math.random() * 1000) / 1000;
if (Math.random() > 0.5) {
randomDirX = -randomDirX;
}
if (Math.random() > 0.5) {
randomDirY = -randomDirY;
}
this.dirXY = { x: randomDirX, y: randomDirY };
}
// LIFE-CYCLE CALLBACKS:
// onLoad () {}
update(dt) {
let moveComp:CCCMoveComp = this;
let nodeComp = moveComp.node;
let xy = moveComp.dirXY;
let stepX = moveComp.speed * dt * xy.x;
let edgeRight = cc.winSize.width / 2 - nodeComp.width / 2;
let edgeLeft = -edgeRight;
let nextStepX = nodeComp.x + stepX;
let edgeUp = cc.winSize.height / 2 - nodeComp.height / 2;
let edgeDown = -edgeUp;
let stepY = moveComp.speed * dt * xy.y;
let nextStepY = nodeComp.y + stepY;
if (nextStepX <= edgeLeft) {
nodeComp.x = edgeLeft;
moveComp.setRandomXY();
} else if (nextStepX >= edgeRight) {
nodeComp.x = edgeRight;
moveComp.setRandomXY();
} else {
nodeComp.x = nextStepX;
}
if (nextStepY <= edgeDown) {
nodeComp.y = edgeDown;
moveComp.setRandomXY();
} else if (nextStepY >= edgeUp) {
nodeComp.y = edgeUp;
moveComp.setRandomXY();
} else {
nodeComp.y = nextStepY
}
// let data = JSON.stringify(this);
}
}
参考图:
当挂着Sprite和自定组件时:

当挂着 sprite ,自定义组件,BlockInputEvents 时

当挂着sprite,BlockInputEvent,没有挂运动(自定义)组件时

当挂着Sprite ,BlockInputEvent,Layaout组件时,没挂运动组件

当挂着sprite ,BlockInputEvent,Layaout ,运动组件时
