Browse Source

ActionManager.OnLongPressTrigger working

nockawa 9 năm trước cách đây
mục cha
commit
31eee9930f
2 tập tin đã thay đổi với 12 bổ sung4 xóa
  1. 3 4
      src/Canvas2d/babylon.canvas2d.ts
  2. 9 0
      src/Canvas2d/babylon.prim2dBase.ts

+ 3 - 4
src/Canvas2d/babylon.canvas2d.ts

@@ -511,12 +511,11 @@
                             ii.findFirstOnly = false;
                             this.intersect(ii);
 
-                            if (ii.isIntersected) {
-                                let iprim = ii.topMostIntersectedPrimitive.prim;
-                                if (iprim.actionManager) {
+                            if (ii.isPrimIntersected(prim) !== null) {
+                                if (prim.actionManager) {
                                     if (this._pickStartingTime !== 0 && ((new Date().getTime() - this._pickStartingTime) > ActionManager.LongPressDelay) && (Math.abs(this._pickStartingPosition.x - ii.pickPosition.x) < ActionManager.DragMovementThreshold && Math.abs(this._pickStartingPosition.y - ii.pickPosition.y) < ActionManager.DragMovementThreshold)) {
                                         this._pickStartingTime = 0;
-                                        iprim.actionManager.processTrigger(ActionManager.OnLongPressTrigger, ActionEvent.CreateNewFromPrimitive(prim, ppi.primitivePointerPos, eventData));
+                                        prim.actionManager.processTrigger(ActionManager.OnLongPressTrigger, ActionEvent.CreateNewFromPrimitive(prim, ppi.primitivePointerPos, eventData));
                                     }
                                 }
                             }

+ 9 - 0
src/Canvas2d/babylon.prim2dBase.ts

@@ -272,6 +272,15 @@
             return this.intersectedPrimitives && this.intersectedPrimitives.length > 0;
         }
 
+        public isPrimIntersected(prim: Prim2DBase): Vector2 {
+            for (let cur of this.intersectedPrimitives) {
+                if (cur.prim === prim) {
+                    return cur.intersectionLocation;
+                }
+            }
+            return null;
+        }
+
         // Internals, don't use
         public _exit(firstLevel: boolean) {
             if (firstLevel) {