TypeError:错误#2007:参数文本必须为非空
Posted
技术标签:
【中文标题】TypeError:错误#2007:参数文本必须为非空【英文标题】:TypeError: Error #2007: Parameter text must be non-null 【发布时间】:2012-07-08 12:18:24 【问题描述】:我是 Flash 新手,我真的不知道我收到此错误的原因是什么:
TypeError:错误 #2007:参数文本必须为非空。 在 flash.text::TextField/set text() 在 sgmap_fla::MainTimeline/mapOver()
我的动作脚本:
description.countryName_txt.text = "";
description.zone_txt.text = "";
map_mc.buttonMode=true;
map_mc.addEventListener(MouseEvent.MOUSE_OVER, mapOver);
map_mc.addEventListener(MouseEvent.MOUSE_OUT, mapOut);
map_mc.northZone.countryName = "Singapore";
map_mc.northZone.zone = "North Zone";
map_mc.centralZone.countryName = "Singapore";
map_mc.centralZone.zone = "Central Zone";
map_mc.eastZone.countryName = "Singapore";
map_mc.eastZone.zone = "East Zone";
map_mc.westZone.countryName = "Singapore";
map_mc.westZone.zone = "West Zone";
map_mc.southZone.countryName = "Singapore";
map_mc.southZone.zone = "South Zone";
function mapOver(e:MouseEvent):void
var mapItem:MovieClip = e.target as MovieClip;
description.countryName_txt.text = mapItem.countryName;
description.zone_txt.text = mapItem.zone;
description.gotoAndStop(mapItem.name);
TweenMax.to(mapItem, .5, tint:0xFF9900);
TweenMax.fromTo(description, .5, alpha:0, x:50, blurFilter:blurX:80, alpha:1, x:10, blurFilter:blurX:0);
function mapOut(e:MouseEvent):void
var mapItem:MovieClip = e.target as MovieClip;
TweenMax.to(mapItem, .5, tint:0x990000);
【问题讨论】:
文本字段文本不能设置为空。这可以通过在设置文本字段之前跟踪countryName
和zone
的mapItem
属性来确认:trace(mapItem.countryName); trace(mapItem.zone);
在您的mapOver
事件处理程序中,mapItem
似乎不是包含这些属性的区域。
嗨 Jason,虽然我从 description.countryName_txt.text = mapItem.countryName; description.zone_txt.text = mapItem.zone;
更改为 description.countryName_txt.text = trace(mapItem.countryName); description.zone_txt.text = trace(mapItem.zone);
,但它似乎不起作用
【参考方案1】:
文本字段文本不能为空。
具体而言,此错误是由将文本字段 text
属性设置为 null
引起的。这可以用TextField
Classic Text 复制:
经典文字:
var tf:TextField = new TextField();
tf.text = null;
这将抛出您引用的错误:
错误 #2007:参数文本必须为非空。
TLF Text没有这个问题,可以设置为null。
根据您的实现,这发生在您的 mapOver(e:MouseEvent)
函数中。 mapItem.countryName
或 mapItem.zone
为空。很可能它们都是空的。
var mapItem:MovieClip = e.target as MovieClip;
description.countryName_txt.text = mapItem.countryName; // null
description.zone_txt.text = mapItem.zone; // null
鼠标事件似乎没有从您期望的范围内分派。您在map_mc
上有一个听众:
map_mc.addEventListener(MouseEvent.MOUSE_OVER, mapOver);
您似乎希望从以下任何影片剪辑中获得此事件:northZone
、centralZone
、eastZone
、westZone
和 southZone
。这些符号具有您正在寻找的属性;但是, map_mc 没有。
所以,根本原因是您的事件侦听器e.target
不是您所期望的符号。
验证e.target
是什么符号。可能是 map_mc
没有您期望的属性:
map_mc.countryName; // doesn't exist
mac_mc.zone; // doesn't exist
您正在寻找map_mc
的孩子的这些属性:
map_mc.northZone.countryName;
map_mc.northZone.zone;
map_mc.centralZone.countryName;
map_mc.centralZone.zone;
// etc...
【讨论】:
嗨,Jason,我能理解你的意思,但我应该如何编写代码才能避免出现此错误?我认为您是对的,因为仅在我的鼠标未指向意味着地图之外的区域后才显示的错误。 如果我这样初始化这个错误会消失吗?map_mc.countryName = ""; mac_mc.zone= "";
不确定这些区域 MovieClip 是什么 - 首先,您可以尝试将事件侦听器直接附加到区域,如:map_mc.northZone.addEventListener(MouseEvent.MOUSE_OVER, mapOver);
以上是关于TypeError:错误#2007:参数文本必须为非空的主要内容,如果未能解决你的问题,请参考以下文章