修复 collsionTriggerHelper 遍历问题

This commit is contained in:
YHH
2020-06-18 00:03:01 +08:00
parent 59b2f150f3
commit 18279d16cd
5 changed files with 23 additions and 19 deletions

View File

@@ -3084,14 +3084,13 @@ var ColliderTriggerHelper = (function () {
for (var i = 0; i < colliders.length; i++) { for (var i = 0; i < colliders.length; i++) {
var collider = colliders[i]; var collider = colliders[i];
var neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers); var neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers);
for (var i_2 = 0; i_2 < neighbors.length; i_2++) { for (var j = 0; j < neighbors.length; j++) {
var neighbor = neighbors[i_2]; var neighbor = neighbors[j];
if (!collider.isTrigger && !neighbor.isTrigger) if (!collider.isTrigger && !neighbor.isTrigger)
continue; continue;
if (collider.overlaps(neighbor)) { if (collider.overlaps(neighbor)) {
var pair = new Pair(collider, neighbor); var pair = new Pair(collider, neighbor);
var shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && var shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && !this._previousTriggerIntersections.contains(pair);
!this._previousTriggerIntersections.contains(pair);
if (shouldReportTriggerEvent) if (shouldReportTriggerEvent)
this.notifyTriggerListeners(pair, true); this.notifyTriggerListeners(pair, true);
this._activeTriggerIntersections.push(pair); this._activeTriggerIntersections.push(pair);
@@ -3134,12 +3133,12 @@ var ColliderTriggerHelper = (function () {
this._tempTriggerList.length = 0; this._tempTriggerList.length = 0;
if (collisionPair.second.entity) { if (collisionPair.second.entity) {
collisionPair.second.entity.getComponents("ITriggerListener", this._tempTriggerList); collisionPair.second.entity.getComponents("ITriggerListener", this._tempTriggerList);
for (var i_3 = 0; i_3 < this._tempTriggerList.length; i_3++) { for (var i_2 = 0; i_2 < this._tempTriggerList.length; i_2++) {
if (isEntering) { if (isEntering) {
this._tempTriggerList[i_3].onTriggerEnter(collisionPair.first, collisionPair.second); this._tempTriggerList[i_2].onTriggerEnter(collisionPair.first, collisionPair.second);
} }
else { else {
this._tempTriggerList[i_3].onTriggerExit(collisionPair.first, collisionPair.second); this._tempTriggerList[i_2].onTriggerExit(collisionPair.first, collisionPair.second);
} }
} }
this._tempTriggerList.length = 0; this._tempTriggerList.length = 0;

View File

@@ -59,6 +59,14 @@ class Main extends eui.UILayer {
private updateFrame(evt: egret.Event){ private updateFrame(evt: egret.Event){
Main.emitter.emit(CoreEmitterType.Update, evt); Main.emitter.emit(CoreEmitterType.Update, evt);
let activeScene = SceneManager.getActiveScene();
if (activeScene){
let player = activeScene.findEntity("player");
if (player){
let mover = player.getComponent<Mover>(Mover);
mover.move(new Vector2(0, 0));
}
}
} }
private async runGame() { private async runGame() {

View File

@@ -17,7 +17,6 @@ class SpawnComponent extends Component implements ITriggerListener {
public update() { public update() {
// console.log("update"); // console.log("update");
this.entity.getComponent<Mover>(Mover).move(new Vector2(0, 0));
} }
public onTriggerEnter(other: Collider, local: Collider){ public onTriggerEnter(other: Collider, local: Collider){

View File

@@ -3084,14 +3084,13 @@ var ColliderTriggerHelper = (function () {
for (var i = 0; i < colliders.length; i++) { for (var i = 0; i < colliders.length; i++) {
var collider = colliders[i]; var collider = colliders[i];
var neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers); var neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers);
for (var i_2 = 0; i_2 < neighbors.length; i_2++) { for (var j = 0; j < neighbors.length; j++) {
var neighbor = neighbors[i_2]; var neighbor = neighbors[j];
if (!collider.isTrigger && !neighbor.isTrigger) if (!collider.isTrigger && !neighbor.isTrigger)
continue; continue;
if (collider.overlaps(neighbor)) { if (collider.overlaps(neighbor)) {
var pair = new Pair(collider, neighbor); var pair = new Pair(collider, neighbor);
var shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && var shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && !this._previousTriggerIntersections.contains(pair);
!this._previousTriggerIntersections.contains(pair);
if (shouldReportTriggerEvent) if (shouldReportTriggerEvent)
this.notifyTriggerListeners(pair, true); this.notifyTriggerListeners(pair, true);
this._activeTriggerIntersections.push(pair); this._activeTriggerIntersections.push(pair);
@@ -3134,12 +3133,12 @@ var ColliderTriggerHelper = (function () {
this._tempTriggerList.length = 0; this._tempTriggerList.length = 0;
if (collisionPair.second.entity) { if (collisionPair.second.entity) {
collisionPair.second.entity.getComponents("ITriggerListener", this._tempTriggerList); collisionPair.second.entity.getComponents("ITriggerListener", this._tempTriggerList);
for (var i_3 = 0; i_3 < this._tempTriggerList.length; i_3++) { for (var i_2 = 0; i_2 < this._tempTriggerList.length; i_2++) {
if (isEntering) { if (isEntering) {
this._tempTriggerList[i_3].onTriggerEnter(collisionPair.first, collisionPair.second); this._tempTriggerList[i_2].onTriggerEnter(collisionPair.first, collisionPair.second);
} }
else { else {
this._tempTriggerList[i_3].onTriggerExit(collisionPair.first, collisionPair.second); this._tempTriggerList[i_2].onTriggerExit(collisionPair.first, collisionPair.second);
} }
} }
this._tempTriggerList.length = 0; this._tempTriggerList.length = 0;

View File

@@ -19,15 +19,14 @@ class ColliderTriggerHelper {
let collider = colliders[i]; let collider = colliders[i];
let neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers); let neighbors = Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers);
for (let i = 0; i < neighbors.length; i++) { for (let j = 0; j < neighbors.length; j++) {
let neighbor = neighbors[i]; let neighbor = neighbors[j];
if (!collider.isTrigger && !neighbor.isTrigger) if (!collider.isTrigger && !neighbor.isTrigger)
continue; continue;
if (collider.overlaps(neighbor)) { if (collider.overlaps(neighbor)) {
let pair = new Pair<Collider>(collider, neighbor); let pair = new Pair<Collider>(collider, neighbor);
let shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && let shouldReportTriggerEvent = !this._activeTriggerIntersections.contains(pair) && !this._previousTriggerIntersections.contains(pair);
!this._previousTriggerIntersections.contains(pair);
if (shouldReportTriggerEvent) if (shouldReportTriggerEvent)
this.notifyTriggerListeners(pair, true); this.notifyTriggerListeners(pair, true);