Flash 如何从swfobject访问bgcolor?

Flash 如何从swfobject访问bgcolor?,flash,actionscript-3,flash-cs5,Flash,Actionscript 3,Flash Cs5,Flashbuilder生成一个存储bgcolor的html(通过javascript): 。。。 var swfVersionStr=“10.0.0”; var xiswfullstr=“playerProductInstall.swf”; var flashvars={}; var params={}; params.quality=“高”; params.bgcolor=“#ff0000”; params.allowscriptaccess=“sameDomain”; params.all

Flashbuilder生成一个存储bgcolor的html(通过javascript):

。。。
var swfVersionStr=“10.0.0”;
var xiswfullstr=“playerProductInstall.swf”;
var flashvars={};
var params={};
params.quality=“高”;
params.bgcolor=“#ff0000”;
params.allowscriptaccess=“sameDomain”;
params.allowfullscreen=“true”;
...
如何在as3中动态更改该颜色? 如何访问此flashvar params.bgcolor


感谢

SWF文件中嵌入了背景色属性(如帧速率、默认尺寸等),但嵌入环境(通常为HTML)可以在嵌入时覆盖所有这些设置。此外,其中一些可以在运行时被ActionScript覆盖。但是,SWF背景色不属于最后一类

相反,您可以使用图形API在所有内容后面绘制一个矩形,例如,通过执行以下操作:

root.graphics.beginFill(0xffcc00); // Replace with your color
root.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
如果您的SWF存在调整大小的风险,则应将上述两行放在事件处理程序中,并将其作为侦听器添加到event.resize的后台,如下所示:

function handleStageResize(ev : Event) : void
{
    root.graphics.clear();
    root.graphics.beginFill(0xffcc00); // Replace with your color
    root.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
}

// Add the listener
stage.addEventListener(Event.RESIZE, handleStageResize);
还要注意的是,某些较旧的浏览器存在一些问题,在正确设置阶段的维度之前,将调用ActionScript的主入口点(这意味着
stage.stageWidth
stage.stageHight
都返回0)因此,您可能希望在第一次调用上述图形代码之前等待一帧

这种方法比使用透明窗口模式和修改SWF后面的背景(HTML)要好得多,因为使用
wmode=transparent
有时会导致奇怪的问题(例如某些浏览器中的键盘输入错误),并会显著降低性能

只有当您确实需要透明的wmode时,才可以使用透明的wmode,例如,当它后面有需要可见的HTML元素时。

//as3
//as3
externalInterface.call("myFuction", "#FF0000");

//javascript 
 var myClr; 
 function myFuction(myVal)
 {
    myClr = myVal;
    window.action = actionFunc();
 }
 window.action = actionFunc();
 function actionFunc()
 {
    var flashvars = {};
    var params = {};
    var attributes = {};
    params.bgcolor = myClr;
    flashvars.mp3="mast.mp3";
    var so = new swfobject.embedSWF("player_slim.swf", "myContent", "300", "120", "9.0.0",true, flashvars, params, attributes);
    so.write("myContent");      
}

 <div id="myContent">
 </div>
外部接口调用(“myFuction”,FF0000); //javascript var-myClr; 函数myFuction(myVal) { myClr=myVal; window.action=actionFunc(); } window.action=actionFunc(); 函数actionFunc() { var flashvars={}; var params={}; var属性={}; params.bgcolor=myClr; flashvars.mp3=“mast.mp3”; var so=new swfobject.embeddeswf(“player_slim.swf”、“myContent”、“300”、“120”、“9.0.0”、true、flashvars、params、attributes); 所以,写(“myContent”); }

这样试试。它起作用了。

有什么意义?只需在Flash中绘制另一个背景。顺便说一句:bgcolor是一个参数,不是flashvar,所以我认为你不能直接访问它。当我调整浏览器窗口的大小时,它很重要。在某些情况下,我需要黑色背景,有时需要白色背景。画另一个背景并不能解决这个问题。你应该把它放在你的问题里@理查多尔森为你提供了部分答案。现在,您可以使用ExternalInterface让JavaScript告诉Flash使用他的技术绘制哪种颜色。或者,如果SWF嵌入的尺寸与浏览器窗口大小有关(例如,全浏览器,100%),那么您可以完全按照我在回答中的建议做,但添加一些逻辑以在Event.RESIZE事件处理程序中选择正确的颜色。
//as3
externalInterface.call("myFuction", "#FF0000");

//javascript 
 var myClr; 
 function myFuction(myVal)
 {
    myClr = myVal;
    window.action = actionFunc();
 }
 window.action = actionFunc();
 function actionFunc()
 {
    var flashvars = {};
    var params = {};
    var attributes = {};
    params.bgcolor = myClr;
    flashvars.mp3="mast.mp3";
    var so = new swfobject.embedSWF("player_slim.swf", "myContent", "300", "120", "9.0.0",true, flashvars, params, attributes);
    so.write("myContent");      
}

 <div id="myContent">
 </div>