• [Flash/Flex] [新闻资讯] 使用flash player的原生光标功能(10.2版本)


    Adobe Flash Player10.2的发布推出了一个新的强大特性,叫做原生光标。 你现在可以使用基于bitmap的光标,而且是运行在操作系统层面,而不是flash中的显示列表。在这片文章中,你将学会以最少的代码用上这个新特性。

    理解原生位图光标

    自从Flash Player 5,开发人员可以使用像 InteractiveObject.startDrag 和 Mouse.hide 来定制光标的外形。但是,原来的方式有下面的一些限制:

    • 一、使用显示对象的方式,光标会被限制在舞台范围内。当光标移动到舞台边缘的时候,光标并不是完全可见的。
    • 二、显示对象光标在flashplayer中渲染是非常耗资源的,因为整个舞台都必须非常频繁的重新渲染。使用updateAfterEvent 方法会导致高CPU使用。
    • 三、如果SWF因为一些原因停止一些微秒,鼠标也会被阻碍,导致用户以为是程序没响应。
    • 四、总的来说,显示对象方式的光标响应是迟缓的(sluggish)。相对来说,原生光标在用户交互方面会表现更好,看起来更好。

         很幸运,使用新的原生光标特性,并不需要写很多代码。你需要稍微多写些AS代码来实现简单的Mouse.hide 和 startDrag 功能.代码非常简洁,而且视觉效果会让你觉得去定制光标的外形和动画的努力是值得的。

    实现原生光标

          实现原生光标时,只要使用到几个非常简洁和高效的属性。When implementingnative mouse cursors, you'll use several properties that are very concise andefficient. 初步功能用的是flash.ui 包中的MouseCursorData。

    下面三个属性用来控制MouseCursorData对象:

    • MouseCursorData.data: 一个BitmapDatavector     ,用来显示光标
    • MouseCursorData.hotSpot: 表示注册点的值,是个Point对象
    • MouseCursorData.frameRate: The显示动画序列的帧速这个属性让你可以创建动画光标

          创建MouseCursorData 对象后,用Mouse.registerCursor方法赋给 Mouse 对象. 一旦Mouse 对象注册之后,你就可以把引用赋给 Mouse.cursor 属性.

    说明: 通过传递一个BitmapData 对象的vector, 你就可以指定一系列位图来创建原生动画光标。

    看看下面的代码:

    1. // 创建 MouseCursorData对象
    2. var cursorData:MouseCursorData = new
    3. MouseCursorData();
    4. // 指定热点(hotspot)
    5. cursorData.hotSpot = new Point(15,15);
    6. // 把位图放到 BitmapData Vector
    7. var bitmapDatas:Vector.<BitmapData> = new
    8. Vector.<BitmapData>(1, true);
    9. // 创建位图光标
    10. // 操作系统限制在32*32之内
    11. var bitmap:Bitmap = new zoomCursor();
    12. // 传值给 bitmapDatas vector
    13. bitmapDatas[0] = bitmap.bitmapData;
    14. //把位图赋值给MouseCursor 对象
    15. cursorData.data = bitmapDatas;
    16. // 用个名称把MouseCursorData注册到Mouse 对象
    17. Mouse.registerCursor("myCursor",
    18. cursorData);
    19. //显示的时候要把名称传给鼠标属性
    20. Mouse.cursor = "myCursor";
    复制代码

          因为操作系统的限制,位图文件不能大于32 × 32 像素。使用更大的图片会失败,而且没有提示。

          任何时候都可以停止使用位图而改回系统光标。使用MouseCursor 中的常量,代码如下:

    Mouse.cursor=  MouseCursor.AUTO;

          前面的例子创建了一个静态位图光标,下面创建一个动画光标。流程很简单,提供多个图片,然后指定动画帧速,代码如下:

    1. // 创建MouseCursorData 对象
    2. var cursorData:MouseCursorData = new
    3. MouseCursorData();
    4. // 指定热点( hotspot)
    5. cursorData.hotSpot = new Point(15,15);
    6. // 把光标位图放到 BitmapData Vector
    7. var bitmapDatas:Vector.<BitmapData> = new
    8. Vector.<BitmapData>(3, true);
    9. // 创建位图序列
    10. // 由于操作系统限制,位图必须在32*32之内
    11. var frame1Bitmap:Bitmap = new frame1();
    12. var frame2Bitmap:Bitmap = new frame2();
    13. var frame3Bitmap:Bitmap = new frame3();
    14. // 把位图数据放到 bitmapDatas vector
    15. bitmapDatas[0] = frame1Bitmap.bitmapData;
    16. bitmapDatas[1] = frame2Bitmap.bitmapData;
    17. bitmapDatas[2] = frame3Bitmap.bitmapData;
    18. // 把位图数据赋值给MouseCursor 对象
    19. cursorData.data = bitmapDatas;
    20. // 光标动画帧速 (1fps)
    21. cursorData.frameRate = 1;
    22. // 注册光标数据到 Mouse 对象
    23. Mouse.registerCursor("myAnimatedCursor",
    24. cursorData);
    25. // 显示的时候要把名称传给鼠标属性
    26. Mouse.cursor = "myAnimatedCursor";
    复制代码

           通过设置MouseCursorData.frameRate 属性,传递一系列BitmapData 对象,Flash Player 自动创建一个指定帧速的动画光标。这是自动完成的,你不需要增加另外的代码。

    原生光标demo

          下面的demo是一个静态原生光标和动画原生光标。底部的按钮还原为系统光标。

     

    说明: 你需要安装Flash Player 10.2才能看到效果

    可以用来做什么

          不管是开发游戏还是RIAs,原生光标让你比以前更容易定制光标外形。另外,新的实现增强了应用程序的显示外观和响应,同时减少了在舞台上移动和重绘光标带来的CPU负载。

  • 相关阅读:
    简化单例模式
    static
    单例模式之懒汉模式
    Car race game
    poj-2403
    poj-2612
    poj-1833
    poj--2782
    poj--2608
    poj--3086
  • 原文地址:https://www.cnblogs.com/sinsoul/p/2838907.html
Copyright © 2020-2023  润新知