zoukankan      html  css  js  c++  java
  • Flash全屏(转载)

     

    2012-05-28 16:12:35|  分类: flash |  标签: |字号订阅

     
     

    问题描述:

    所谓flash全屏实际上就是发布之后的flash文件的全屏显示。他主要包含下面两种情况:

    1、在Flash播放器中的全屏显示

    2、在浏览器中的全屏显示

    不管是上面的哪一种情况,都是指的舞台的全屏显示,所以我们需要关注的其实是stage的全屏。

    下面,我们就这两种情况来做具体分析:

     

    1、在Flash播放器中的全屏显示

    首先,我使用的是flash cs3,在时间轴上写代码,具体操作如下:

    <1>、新建一个flash文档

    <2>、新建一个元件(影片剪辑或者按钮)

    <3>、将元件拖入舞台,并为其设置一个实例名,如(d)

    <4>、在时间轴上写上全屏的代码,如下所示:

    d.addEventListener(MouseEvent.CLICK,c);

    function c(e:MouseEvent):void

    {

    switch(stage.displayState) {

                  case "normal":

               stage.displayState = "fullScreen";     

              break;

           case "fullScreen":

              default:

              stage.displayState = "normal";     

              break;

        }

    }

    <5>、使用Ctrl+Enter测试试行

    执行结果并不如意,当我点击舞台的这个元件的实例时,程序并没有任何反应,没有如我所想的那样全屏显示。仔细查看了下API,发现API上只是说明了displayState属性能够控制flash的全屏显示,而且,在上面的说明中,并没有指出在flash播放器中需要做一些额外的工作。本身代码并没有很多,而且并没有出现任何的报错,为了思维的严谨,我刻意在事件处理函数中加入了一个打印语句,看看事件处理函数有没有得到执行。很奇怪的是,打印语句确实执行了,而且也没有报错误,但是就是没有得到我想要的结果。难道还有我需要额外做的事情?实在是没有头绪,所以去网络上查看了相关的资料。找了几个源码,确实能够实现全屏,但是我在打开源文件查看代码的时候,发现里面的代码都是一堆一堆的,刚开始还真是吓着了,怎么这么多,难怪我写的执行不了。仔细往里面看了之后,发现很多其实都是为了兼容flash之前的版本。我电脑中当前的flash版本是9.0.45.0,在API中提示,displayState的支持的最低版本是Flash Player 9.0.28.0。也就是说,我的电脑中的flash版本是完全能够支持这样一种写法的。可执行的源代码中,除去那些兼容版本和其他辅助的代码,发现其写法和我前面的写法基本相同,那么究竟是怎么回事?抱着试一试的态度,我打开了当前flash发布的swf文件,点击了一下元件的实例之后,居然全屏了!

    经过多次测试后,确认了这个发现,在flash cs3中写的全屏代码,使用flash cs3本身去预览的时候,并不能得到全屏。具体原因,猜想是因为在flash cs3中的执行是模拟执行,或者是在flash cs3中执行时,会受到某些限制。

     

    接下来,我在FB3中写下如下代码:

    package {

       import flash.display.Sprite;

       import flash.events.MouseEvent;

       import flash.system.System;

       public class D extends Sprite

       {

          public function D()

          {

            stage.addEventListener(MouseEvent.CLICK,show);

          }

          private function show(e:MouseEvent):void

          { stage["displayState"]=stage["displayState"]=="normal"?"fullScreen":"normal";

          }

       }

    }

    将生成的swf文件拷贝出来,然后执行之后,也得到了正确的结果。这样的话,我就基本上解决了在flash播放器中全屏的问题。

    注:对于一些需要兼容其他版本的写法,会在后面详细讨论。

     

     

    2、在浏览器中的全屏显示

    首先,我还是拿着之前写好的代码(flash cs3中已经实现了在flash播放器中全屏的代码),使用html进行发布预览。得到结果:不允许使用全屏模式。为了确认不是flash cs3本身的问题,我打开了生成的html文件,也得到了同样的错误提示。回想API中对于displayState这个属性的提示:

    若要启用全屏模式,请将 allowFullScreen 参数添加到包含 SWF 文件的 HTML 页中的 object 和 embed 标签,同时将 allowFullScreen 设置为 "true",如下例所示:

    <param name="allowFullScreen" value="true" />

    ...

    <embed src="example.swf" allowFullScreen="true" ... >

    于是,我在html文件中找到了对应的位置,并做了对应的修改。保存之后,再次打开时,结果并不如我所想,还是报之前的那个错误。我明明是根据API中的提示做的啊?这么就是不行呢?我反复的检查和测试,但是最后的结果就是不对。最后是在没有办法了,我将整个html文件都看了,我把所有的都弄明白就该知道是为什么了把!很轻易的,在我不再执着于API上所提示的信息之后,我发现,在javascript脚本中还存在一个”allowFullScreen”,而且紧随着这个字符串的是一个”false”。会不会是这个地方的问题呢?我很快的把”false”改为了”true”,保存之后,再一次执行。结果得到了全屏显示!反复测试后发现,只有同时修改了三处的”allowFullScreen”的值为true之后才能够使得flash在浏览器中实现全屏。

     

    接下来,我在FB3中做了同样的设置,发现也实现了全屏。

     

    总结:

    1、stage中存在一个属性displayState,可以实现全屏,但是这个属性支持的版本是

    Flash Player 9.0.28.0以及之后的版本,对于这个版本之前的flash播放器来说,是不支持displayState属性的,这个时候,想要flash能够全屏的话,必须使用AS和javascript通信,通过javascript来辅助实现。

    2、为stage设置了displayState属性的值之后,需要将swf文件单独拿出来使用flash 播放器打开,这样的话,才能够正常显示全屏(因为在flash cs3中直接预览的话,是看不到效果的)。

    3、如果想要在浏览器中实现全屏,那么必须修改所生成的html文件的源代码。需要修改以下三个地方:

    <1>、在object标签中加入一个子标签:<param name="allowFullScreen" value="true" />

    <2>、在embed标签中加入一个属性allowFullScreen="true"

    <3>、在AC_FL_RunContent函数的参数中成对加入两个”allowFullScreen”,"true"

     

    一些还需要完善的地方:

    1、如何兼容以前的版本

    2、如何兼容其他浏览器的版本(未做测试)

  • 相关阅读:
    android activity 生命周期
    Android event logcat的研究
    关于new enhancement的一些知识
    LEAVE LIST-PROCESSING和LEAVE TO LIST-PROCESSING事件的作用
    报错消息写在AT SELECTION-SCREEN OUTPUT和START-OF-SELECTION事件下的区别
    字符串的 Base64 加密和解密
    接口的学习
    IDOC
    ABAP文件上传下载 用SMW0
    获取本机信息如IP 电脑名称等类
  • 原文地址:https://www.cnblogs.com/yanghaihao/p/2863912.html
Copyright © 2011-2022 走看看