SpriteJS默认代理了container上的鼠标和Touch事件,所以我们可以直接给精灵元素注册这些事件。

SpriteJS默认支持下列事件:

我们可以直接对精灵注册事件,方法是直接使用。

on方法的第一个参数还可以是数组,可以同时给精灵注册多个事件类型。

stopDispatch

就像DOM有冒泡机制和阻止冒泡的方法一样,SpriteJS的事件根据精灵的层叠位置关系依次派发,我们可以通过调用来阻止事件派发给同级的后续元素,这样可以实现事件的遮罩。

上面的例子中,我们通过stopDispatch()屏蔽掉下层元素对mouse事件的响应。要注意,stopDispatch()并不会阻止不同级的元素的事件,因此阻止掉sprite元素的mousemove事件,并不会同时阻止掉它的父容器layer的mousemove事件。

SpriteJS元素有一些内置的事件,主要有以下几种:

事件类型事件参数事件说明
append{parent, zOrder}当元素被append到layer上时触发
remove{parent, zOrder}当元素被从layer上remove时触发
update{context, target, renderTime, fromCache}当元素被重新绘制时触发,发生重绘操作有可能是元素本身属性发生改变,也有可能是其他元素属性改变需要重绘,影响到当前元素。target是要绘制的元素,renderTime是当前layer的timeline的时间,fromCache为true,则说明元素缓存未失效
beforedraw{context, target, renderTime, fromCache}当元素被重新绘制时触发,发生重绘操作有可能是元素本身属性发生改变,也有可能是其他元素属性改变需要重绘,影响到当前元素。target是要绘制的元素,renderTime是当前layer的timeline的时间,fromCache为true,则说明元素缓存未失效
afterdraw{context, target, renderTime, fromCache}当元素被重新绘制时触发,发生重绘操作有可能是元素本身属性发生改变,也有可能是其他元素属性改变需要重绘,影响到当前元素。target是要绘制的元素,renderTime是当前layer的timeline的时间,fromCache为true,则说明元素缓存未失效
preload{target, loaded, resources}这个事件只在scene预加载资源时触发,target是当前scene,loaded是已经加载的资源,resources是需要加载的所有资源

user delegate

SpriteJS可以通过scene.delegateEvent(type, subject)将其他外部事件代理过来,所有在subject上可以被响应的事件都可以代理进来。比如我们可以代理document上的键盘输入事件:

这里有

我们可以给精灵元素派发事件,做法是调用精灵元素的方法,该方法有四个参数。

  • eventArgs 派发的事件参数
  • collisionState 默认为false,这样spritejs会检查eventArgs.layerX和eventArgs.layerY来判断事件是否在元素范围内,如果设为true,则跳过这项检查,始终认为事件在范围内。

Remove Events

我们可以调用方法将事件监听移除。type可以是数组,这样批量移除多个事件。handler参数如果缺省,那么将这个类型下的所有事件监听句柄全部移除。