23
2015
01

(九)createjs-ButtonHelper

flash里边还有一个用的比较多的显示元件,没错就是SimpleButton,缩写是“SB”,设计人员喜欢,程序人员不喜欢的一个显示元件,其实只是作为按钮的话,还是很方便的。

就像as里边经常用MovieClip或是Sprite实现按钮一样,createjs里边完全可以用Sprite来实现(虽然没翻源码,猜想官方也是这么做的),所以如果够用的话就没必要自己再写一遍了。

ButtonHelper,这个名字不敢恭维,为什么不叫SimpleButton或者干脆叫Button,还是有其他深意?暂时先不管了,还是直接拿来用吧。

还是直接上源码:

  1. //创建stage,参数为canvas的id

  2. var stage=new createjs.Stage("gameMain");

  3. createjs.Ticker.setFPS(6);

  4.  createjs.Ticker.addEventListener("tick", tick);

  5. function tick(event){

  6.                 stage.update();//需要tick,然后自己update,才能刷新显示。

  7.             }

  8. //创建一个spriteSheet;具体参数可以看api,真正用到再学。

  9. var data = {

  10. images: ["bt2.png"],

  11. frames: {width:201, height:40},

  12. animations: {

  13. out:0,

  14. over:1,

  15. down:2

  16. }

  17. };

  18. var spriteSheet = new createjs.SpriteSheet(data);

  19. //创建一个Sprite

  20. var sp=new createjs.Sprite(spriteSheet);//定义:Sprite(spriteSheet, frameOrAnimation);

  21. //创建一个矩形作为点击区域

  22. var hitArea=new createjs.Shape();

  23. hitArea.graphics.beginFill("#000000").drawRect(0,0,100,100);

  24. var btn = new createjs.ButtonHelper(sp, "out", "over", "down", false, sp, "out");

  25. //var btn = new createjs.ButtonHelper(sp, "out", "over", "down", false, hitArea);


  26. stage.addChild(sp);sp.play();

  27. stage.enableMouseOver(30);//需要手动设置一个频率,才会定时检测rollover事件,和update一样,同理其他不能直接响应的鼠标事件。不过响应似乎有点慢。

  28. //sp.addEventListener("rollout",function(){console.log("roll over");})

  29. var n=0;

  30. sp.addEventListener("click",clickHandler);

  31. function clickHandler(){

  32. n++;

  33. console.log("点击了按钮"+n+"次");

  34. }

关键是这句

new createjs.ButtonHelper(sp, "out", "over", "down", false, sp, "out");

里边参数解释如下:

  1. target Sprite | MovieClip

  2. The instance to manage.

  3. 一个Sprite或是MOvieClip类型的实例,用于显示及改变状态时控制。必选


  4. [outLabel="out"] String optional

  5. The label or animation to go to when the user rolls out of the button.

  6. 鼠标out时对应的帧,参数值是字符串,对应SpriteSheet里边的那个标签。可选,默认是“out”


  7. [overLabel="over"] String optional

  8. The label or animation to go to when the user rolls over the button.

  9. 鼠标over时对应的帧,参数值是字符串,对应SpriteSheet里边的那个标签。可选,默认是“over”


  10. [downLabel="down"] String optional

  11. The label or animation to go to when the user presses the button.

  12. 鼠标按下时对应的帧,参数值是字符串,对应SpriteSheet里边的那个标签。可选,默认是“down”


  13. [play=false] Boolean optional

  14. If the helper should call "gotoAndPlay" or "gotoAndStop" on the button when changing states.

  15. 当状态改变时,是执行GotoAndPlay还是gotoAndStop,相当于一个按钮有3帧,每一帧对应一个影片剪辑,跳转到相应的帧时,里面的影片剪辑是Stop还是Play;默认是false,对应的是Stop。可选

  16. 如果想要鼠标放上去的时候播放一个动画而不是单纯的改变状态,就需要设置成true,并且Sprite该标签对应的应该是一个animation(想要深入了解,先看一下SpriteSheet)。


  17. [hitArea] DisplayObject optional

  18. An optional item to use as the hit state for the button. If this is not defined, then the button's visible states will be used instead. Note that the same instance as the "target" argument can be used for the hitState.

  19. 设置一个显示元件作为点击区域。可选


  20. [hitLabel] String optional

  21. The label or animation on the hitArea instance that defines the hitArea bounds. If this is null, then the default state of the hitArea will be used. *

  22. 点击区域使用的标签。可选

  23. 结合上一个参数,合起来,设置点击区域;因为如果是Shape或是Bitmap还好,如果是Sprite的话,Sprite是有好多帧的,所以就需要指定Sprite的某一帧作为点击区域


一般来说,后边的参数都省略就好了。除非真的需要设置点击区域的时候,再仔细研究。

而且,响应鼠标事件默认就是像素级别的。

之前事件那里还留下一个问题,就是rollover之类的事件默认侦听不到。

stage.enableMouseOver(30);

需要手动设置一个频率来检测(可以认为是捕获)mouseover事件。


点击查看实例

« 上一篇下一篇 »

发表评论:

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