【问题标题】:TypeError: Error #2007: Parameter text must be non-nullTypeError:错误#2007:参数文本必须为非空
【发布时间】: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);,但它似乎不起作用

标签: actionscript


【解决方案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);
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2013-06-02
相关资源
最近更新 更多