• 关于Scaleform 3.1使用经验


    工作原因接触了Gfx Scaleform 3.1。本人表示此东东异常强大。但是要用好他有很多性能问题,不仅仅是程序时要考虑的!更需要美术和FLASH制作人员共同努力。

    关于GFX具体是什么东西以及干什么用的。本人不做介绍,只是谈论一下使用时的一些思考和经验之谈。因为相关方面的文章几乎没有,而且又是商业系统。所以,就在这里做个小小的总结。


    1. Flash中的Object对象可以完全由C++代码进行实现,并且在Flash中进行调用。包括Function函数。凭借这点我们可以让客户端的逻辑拥有脚本接口,并且提供给Flash数据和控制客户端的接口。

    2. Flash中的TextField控件由Gfx进行了一定的扩展,所以关于HTML的使用上除了<img>标记基本与常规情况下的Flash相同,关于<img>标记的使用就必须要涉及到第三点所提到的相关内容了。理由:GFX中的<img>无法直接从外部取相对路径的图片文件。

    3. Flash中的图片加载问题需要C++进行实现与管理,Gfx只提供了简单的接口GImageBase,具体实现以及图片内存管理都需要客户端进行处理。包括动画图片以及可渲染图片,都可以进行实现。当然,如果图片本身包含在相应的Flash文件(.FLA)中可以直接通过到处标记符加载,无需通过客户端。

      关于图片加载问题,最值得说明的是设备重置问题, 设备一旦发生丢失后,就必须要调用Gfx的相关函数使其Renderer进行重置,否则Gfx可能无法继续进行运行。然后,也是最关键的一点,就是设备重置前必须先告知并且释放GImageBase相关的接口。否则。重置是无法成功的。最后一点,就是托管图片与非托管图片的问题以及引用计数的问题 都是必须要注意的。以上后面几点属于细节问题。因此我就不多提了(如果遇到问题请看红字亮点)。

    4. 焦点问题,在一般的单窗口,单菜单界面的游戏环境中可能不会遇到问题,但是在复杂且多窗口的情况下,这个问题就凸显出来了。我主要介绍2种技巧,一个是利用FLASH的Selection侦听器,可以知当前所选MovieClip的信息,还有就是利用CLIK框架中的FocusManager来得知当前焦点的信息,通过以上2个技巧可以全面了解当前FLASH环境下焦点是处于什么控件上,并且用来区分是 文字输入框 还是 普通按钮。

    5. 窗口击穿的问题,在很多游戏中,窗口往往是透明的,例如聊天文本框。如果是通过FLASH的HITTEST或者使用GFX提供的HITTEST函数执行效率非常差。因为会完全遍历所有MOVIECLIP。所以有一个简单的方法就是将背景设置为FLASH的"按钮",然后利用GFX提供的getTopEntity函数,高效的获取当前鼠标光标正处于什么控件上。从而得出当前是否能够有效击穿窗口结果。

    6. 文字渲染问题,GFX还提供了一套文字渲染系统,并且能够直接渲染HTML文字,但是这个系统并不是完美的,和FLASH中的textField有所不同,他不支持内嵌图片,同时还有一个文档中未说明的技巧,就是TEXTFORMAT标签的使用。如果有朋友遇到文字显示格式的问题,可以去查查看。

    7. 字体问题,根据GFX的介绍,字体问题有3种解决方案,但是根据实际使用,只有一种方案比较有效,就是利用C++建立GFXFONTMAP,并引入内嵌完整字体的SWF。另外2种方案对于中文环境的支持比较糟糕。很多非主流文字都无法正常显示。

    8. 自定义控件的设计,CLIK框架非常强大,所以详细的阅读其代码是非常有必要的,特别是CORELIST与SCROLLLIST这2个类,并且我们可以通过此2类的学习,可以设计出各种必要的控件。


    最后。。。如果想到新的我会加的。

  • 相关阅读:
    Vue.js学习笔记 第五篇 事件处理
    多sheet导出核心代码
    jeecg查询备份
    输入URL 一瞬间发生了什么
    get post 的区别
    Redis所需内存 超过可用内存怎么办
    MySQL联合索引
    常用的sql
    MySQL 时间类型字段的分析
    PHP各个版本的区别
  • 原文地址:https://www.cnblogs.com/oplusx/p/1850593.html
Copyright © 2020-2023  润新知