zoukankan      html  css  js  c++  java
  • actionscript3 中关于sprite的mask问题

    在项目中,对某一个sprite应用遮罩,升级了新的flashplayer11之后出现了问题,会出现一些界面消失或部分消失的情况。

    测试代码如下:

    package
    {
    	import flash.display.SpreadMethod;
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    	
    	public class Test extends Sprite
    	{
    		private var testBtn:BTN1 = new BTN1();
    		private var testMc2:Panel2 = new Panel2();
    		private var maskMc:MC2 = new MC2();
    		
    		private var layer:Sprite = new Sprite();
    		
    		public function Test()
    		{
    			mask = maskMc;
    			addChild(maskMc);
    			addChild(testBtn);
    			
    			testBtn.addEventListener(MouseEvent.CLICK,onClick);
    			stage.addEventListener(Event.RESIZE, resizeHandler);
    		}
    		
    		private function onClick(e:MouseEvent):void
    		{
    			if(testMc2.parent == null)
    			{
    				addChild(testMc2);
    				testMc2.x = 200;
    				testMc2.y = 100;
    			}
    			else
    			{
    				testMc2.parent.removeChild(testMc2);
    			}
    		}
    		
    		/**
    		 * SWF尺寸改变时调度
    		 */
    		private function resizeHandler(event:Event):void
    		{
    			mask = maskMc;
    		}
    	}
    }
    

     在浏览器中运行时,通过点击testBtn显示testMc2,然后拉伸浏览器尺寸使得swf尺寸改变。这个时候会发现testMc2显示上会出现问题。

    这在flashplayer 11.1.102.62 上有所出现,但在其他版本却看不到这个问题。

    最终原因发现是因为少写了一行代码:

    			addChild(maskMc);
    

     原因是未将遮罩列入显示列表中,所以当swf尺寸改变时遮罩已经开始失效了。这在官方API中有所说明:

    调用显示对象被指定的 mask 对象遮罩。 要确保当舞台缩放时蒙版仍然有效,mask 显示对象必须处于显示列表的活动部分。
     但不绘制 mask 对象本身。 将 mask 设置为 null 可删除蒙版。
    

    所以,记得将遮罩也addChild。

    关注我: weibo.com/holycy
  • 相关阅读:
    Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
    40个Java多线程问题总结
    Windows10实用技巧-固定快捷方式到磁贴菜单方式
    wordpress初始化安装
    xshell输入奇怪,空格间距变大
    Python2和Python3共存安装
    搭建nginx反向代理用做内网域名转发
    下载网页视频音频方法(djyeye为例)
    Dell 戴尔预装Windows8改成Windows7
    Nginx基本功能极速入门
  • 原文地址:https://www.cnblogs.com/holycy/p/2363342.html
Copyright © 2011-2022 走看看