一、发布目标为独立Flashplayer播放器。
缩放和对齐模式很多地方类似于Flex 4 桌面项目。
通过在fx:Metadata 中使用[SWF(width=xxx,height=xxx)]元数据,或在编译器参数中,添加-default-size xxx xxx 来指定Flashplayer的窗口内容区域(舞台)大小,舞台默认尺寸仍为500×375。
当scaleMode为noScale时,Stage尺寸和Application尺寸会随窗口尺寸改变而改变 填满整个窗口内容区域。如scaleMode不为noScale,与桌面程序不同的是,窗口尺寸改变时,Application尺寸也不会改变。Stage尺寸会保持为初始设置尺寸(例如,noScale时,窗口内容区域变为800×600,则Stage、Application尺寸也会变成800×600,如这时scaleMode改为其他值,则Stage尺寸变回初始尺寸500×375,而Application 尺寸,都会固定为800×600,不会随窗口改变而改变,直到再次设置为noScale。而Flex 4桌面程序中Application尺寸仍会继续随窗口而改变)
stage.align取值对SWF内容位置的影响,跟Flex 4 桌面程序相同,窗口始终把SWF内容尺寸视为初始设置的尺寸,以此来计算定位,尽管在noScale模式下,SWF舞台和Application的尺寸随窗口尺寸而改变,但SWF内容的定位仍按照SWF的初始尺寸计算,故也会出现像Flex 4桌面项目中一样的偏移错误的问题
总结:
SWF内容在窗口中的位置根据SWF初始设置尺寸计算,noScale时,Application尺寸会随窗口改变填满窗口内容区域。其他缩放模式时,Application尺寸保持为最后的值不变。当Application尺寸和SWF初始尺寸设定值不同时,除TL外的其他对齐方式,SWF内容的位置将不符合预期情况。
只有当SWF内容初始设定值=Application尺寸时,非TL的对齐位置才会正确计算
二、发布目标为HTML+swf
1、未设置SWF内容尺寸时,SWF内容尺寸仍为其默认尺寸500×375。
FlashBuilder 中,如果未设置SWF内容尺寸,则生成的HTML中将会设置Flash标签尺寸为
width="100%" height="100%"。
舞台Stage和Application的初始尺寸为浏览器当前窗口的内容区域尺寸。
而对齐模式对SWF内容的定位,仍以SWF内容尺寸(默认500×375)来计算。
noScale模式时,Stage和Application尺寸会随浏览器窗口改变,填满整个浏览器内容区域,但对齐定位仍按SWF内容尺寸为默认尺寸500×375计算,故出TL值外,其他的对齐模式选项,对SWF内容对齐位置的结果不符合预期值。
对于非noScale缩放模式,Stage尺寸会变为SWF内容初始尺寸,Application尺寸会保持为最后的尺寸不再变化。对齐模式仍以SWF内容初始尺寸计算SWF内容区域的位置。
由于浏览器中,Application的尺寸在程序运行一开始就为浏览器的内容区域尺寸(和独立播放器项目中不同,不是SWF内容初始尺寸)。所以Application的尺寸很可能一开始就与对齐模式计算位置使用的SWF尺寸不同,非TL对齐位置也很可能不符合预期值。
2、用fx:Metadata或-default-size xxx xxx 编译器参数设置SWF初始尺寸
设置SWF初始尺寸后,FlashBuilder生成的HTML中,会将Flash标签尺寸设置为前面设定的SWF初始尺寸,
div水平居中对齐
因为Flash标签尺寸设置成了固定像素值,所以,浏览器窗口改变时,整个SWF内容不再发生尺寸变化,不会调度Event.RESIZE事件,对齐模式和缩放模式的改变不会有任何效果,因为SWF内容的尺寸、Stage尺寸、Application尺寸没有发生任何改变。只有SWF的水平位置,会随浏览器窗口改变而居中对齐(因为Flash所在的div标签设置为水平居中对齐)
3、用fx:Metadata或-default-size xxx xxx 编译器参数设置SWF初始尺寸,手动修改HTML,让Flash标签的尺寸为width="100%" height="100%"。
SWF初始尺寸变成了以上设定的值,对齐、缩放,会将SWF内容尺寸视为其初始设定尺寸来计算。
情况与1相似,只是SWF尺寸由默认的500×375,变成了新设定的值而已
总结要点:在浏览器中的Flex程序当stage.align=""(默认)
stage.scaleMode=StageScaleMode.SHOW_ALL等值(不设置NO_SCALE)
要让应用程序正确的缩放并定位,需要把Application的width和height设置为与SWF舞台尺寸相同的固定值(最简单的方法是直接在Application根标签里设置width、height属性为固定值),并修改FlashBuilder自顶生成的html,把显示swf的object标签的width和height都改为100%