Environment: Cocos Creator 3.7.2Language: TypeScript
The scene contains several similar sprites, and the handler needs to know which one the user touched.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import { _decorator, Component , Node , EventTouch } from 'cc' ;const { ccclass, property } = _decorator;@ccclass ('Drag' )export class Drag extends Component { @property ({ type : [Node ] }) public dragNodes : Node [] = []; public touchedNumber = 0 ; onEnable ( ) { for (const node of this .dragNodes ) { node.on (Node .EventType .TOUCH_START , this .onTouchStart , this ); node.on (Node .EventType .TOUCH_MOVE , this .onTouchMove , this ); node.on (Node .EventType .TOUCH_END , this .onTouchEnd , this ); } } onDisable ( ) { for (const node of this .dragNodes ) { node.off (Node .EventType .TOUCH_START , this .onTouchStart , this ); node.off (Node .EventType .TOUCH_MOVE , this .onTouchMove , this ); node.off (Node .EventType .TOUCH_END , this .onTouchEnd , this ); } } private onTouchStart (event: EventTouch ) { const index = this .dragNodes .indexOf (event.target as Node ); if (index !== -1 ) { this .touchedNumber = index + 1 ; console .log ('Touched sprite:' , this .touchedNumber ); } } private onTouchMove (event: EventTouch ) {} private onTouchEnd (event: EventTouch ) {} }
The original example accidentally called on() again in onDisable; use off() to prevent duplicate listeners each time the component is re-enabled.