02
2016
08

pixijs入门-事件

pixi.js的显示对象都可以响应鼠标事件,官方的api不好,学习起来着实费劲。

pixi.js中EventEmitter相当于as中的EventDispatcher,所有接受发送事件的对象,都继承自EventEmitter。addListener是在这个类中定义的,但是官方的api中不显示该类的属性和方法。

源码中,EventEmitter = require('eventemitter3');不知道怎么才能导出EventEmitter中的方法。有时间得熟悉熟悉nodejs开发,要不真的落伍了。


发现InteractionManager类,不知道怎么用。


先老老实实学会应用吧。

代码:

<html>
	<head>
		<title>pixi.js入门-事件</title>
		<script type="text/javascript" src="../pixi.js"></script>
		
		<script type="text/javascript">

		var frameRate=30;
		var renderer;
		var stage;
		var tf;
		var fps=0;
		var ticker;
		window.onload = function() {
			renderer = new PIXI.WebGLRenderer(600, 400,{transparent:true});
			document.body.appendChild(renderer.view);
			stage = new PIXI.Container();
			
			var texture = PIXI.Texture.fromImage('bunny.png');
			var sp1 = new PIXI.Sprite(texture);
			stage.addChild(sp1);
			sp1.x = 200;
			sp1.y = 200;
			
			sp1.interactive = true;
			stage.interactive = true;
			
			sp1.mousedown =function(e){ 
				console.log("sp1.mousedown");
			}
			sp1.mouseover=function(e){ 
				console.log("sp1.mouseover");
			}
			sp1.mouseout=function(e){ 
				console.log("sp1.mouseout");
			}
			stage.mouseup=function(e){ 
				console.log("stage.mouseup");
			}
			sp1.click=function(e){ 
				console.log("sp1.click");
			}
			sp1.touchstart=function(e){ 
				console.log("sp1.touchstart");
			}
			sp1.touchmove=function(e){ 
				console.log("sp1.touchmove");
			}
			sp1.touchend=function(e){ 
				console.log("sp1.touchend");
			}
			sp1.addListener("mousedown",function(e){ 
				console.log("mousedown:",e);
			});
			sp1.addListener("mouseover",function(e){ 
				console.log("mouseover:",e);
			});
			sp1.addListener("mouseout",function(e){ 
				console.log("mouseout:",e);
			});
			stage.addListener("mouseup",function(e){ 
				console.log("mouseup:",e);
			});
			sp1.addListener("click",function(e){ 
				console.log("click:",e);
			});
			sp1.addListener("touchstart",function(e){ 
				console.log("touchstart:",e);
			});
			sp1.addListener("touchmove",function(e){ 
				console.log("touchmove:",e);
			});
			sp1.addListener("touchend",function(e){ 
				console.log("touchend:",e);
			});
			
		
			tf = new PIXI.Text("fps:0", {
				font: '24px Arial',
				fill: 0xff1010,
				align: 'left'
			});
			stage.addChild(tf);

			refresh();

			setInterval(showFps, 1000);
		}
		function showFps(){
			tf.text="fps:"+fps;
			fps=0;
		}
		function refresh(){ 
			fps++;
			var t=new Date().getTime();
			renderer.render(stage);
			t=new Date().getTime()-t;
			var delay=1000/frameRate;
			if(t>=delay){ 
				refresh();
			}
			else{ 
				setTimeout(refresh,delay-t);
			}
		}

		</script>
	</head>
	<body>
	</body>
</html>

关键在这句,一定要设置为true。

官方API中有这样一句:Any DisplayObject can be interactive if its interactive parameter is set to true。所有DisplayObject都可以交互,但是需要设置interactive 为true。

sp1.interactive = true;

可以使用addListener,也可以直接使用sp1.click,用过js的应该都很熟悉了。

touch事件和mouse事件是分开的,pc端只支持mouse事件,移动端只支持touch事件,不知道能不能像createjs那样,设置一个和开关,开启之后,自动识别并转换mouse和touch事件,这样大多数情况下,开发者就只需要关注逻辑了。



« 上一篇下一篇 »

相关文章:

pixijs入门-移动端click  (2016-8-16 15:8:14)

pixijs入门-mouseX  (2016-8-16 14:49:7)

pixijs入门-MovieClip  (2016-8-16 14:0:55)

TypeScript入门-03-使用js库  (2016-8-16 10:15:15)

TypeScript入门-02  (2016-8-12 17:32:17)

TypeScript入门-01  (2016-8-12 13:10:28)

TypeScript入门资源  (2016-8-11 10:19:7)

pixijs入门-ticker  (2016-8-6 16:26:18)

pixi和egret效率对比2  (2016-8-6 15:6:9)

pixijs入门-继承  (2016-8-3 9:22:26)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。