CocosCreator 全局Touch事件


全局的Touch事件

const{ccclass}=cc._decorator;
@ccclass
export default class GlobalTouchInput extends cc.Component{
	private _eventManager=cc["internal"]["eventManager"];
	private _touchListener:any;
	protected start():void{
		super.start();
		const EventListener=cc["EventListener"];
		this._touchListener=EventListener.create({
			event:EventListener.TOUCH_ONE_BY_ONE,
			swallowTouches:false,//是否吞噬touch事件
			owner:this.node,
			mask:null,
			onTouchBegan:this.onTouchStart.bind(this),
			onTouchMoved:this.onTouchMoved.bind(this),
			onTouchEnded:this.onTouchEnded.bind(this),
			onTouchCancelled:this.onTouchCancelled.bind(this)
		});
		this._eventManager.addListener(this._touchListener,this.node);
		
	}
	
	private onTouchStart(touch:cc.Touch,event:cc.Event.EventTouch):boolean{
		cc.log("touch start");
		//此處必須返回true(表示接觸到了節點),否則TOUCH_MOVE,TOUCH_END,TOUCH_CANCEL不觸發。
		return true;
	}
	private onTouchMoved(touch:cc.Touch,event:cc.Event.EventTouch):void{
		cc.log("touch move");
	}
	private onTouchEnded(touch:cc.Touch,event:cc.Event.EventTouch):void{
		cc.log("touch end");
	}
	private onTouchCancelled(touch:cc.Touch,event:cc.Event.EventTouch):void{
		cc.log("touch cancel");
	}
	
	protected onDestroy():void{
		super.onDestroy();
		this._eventManager.removeListener(this._touchListener,this.node);
	}
	
}

touch穿過透明區域(以下代碼未驗證)

const {ccclass,property}=cc._decorator;

@ccclass
export default class CrossTransparentTouch extends cc.Component{
	protected start():void{
		this.node.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd,this)
		this.node["_hitTest"]=this.hitTest.bind(this);
	}
	
	private hitTest(point:cc.Vec2){
		let locationInNode=this.node.convertToNodeSpaceAR(point);
		let size=this.node.getContentSize();
		let sprite=this.node.getComponent(cc.Sprite);
		if(sprite){
			//需要在編輯設置 texture.packable 為 false
			let imgObj=sprite.spriteFrame.getTexture().getHtmlElementObj();
			return this.onLucencyTouch(imgObj, locationInNode.x, size.height-locationInNode.y);
		}
		return false;
	}

	private onLucencyTouch(img:HTMLImageElement,x:number,y:number):boolean{
		let cvs=document.createElement("canvas");
		let ctx=cvs.getContext('2d');
		cvs.width=1;
		cvs.height=1;
		ctx.drawImage(img,x,y,1,1,0,0,1,1);
		let imgdata=ctx.getImageData(0,0,1,1);
		return imgdata.data[3]>0;
	}
	
	private onTouchEnd(eventTouch:cc.Event.EventTouch):void{
		console.log("touch end")
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM