我正在尝试命名动态加载的MovieClip实例。
我试过这样做:
comp = new Comp();
//并尝试这样做 - > var comp:MovieClip = new Comp();
comp.name =“comp”; // comp是我想要实例的名称
但是在OUTPUT窗口中:
ReferenceError: Error #1056: Cannot create property comp on ToggleTest.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at ToggleTest()
这是我在ActionScript文件中的代码: 包 {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class ToggleTest extends MovieClip
{
var comp:MovieClip;
public function ToggleTest()
{
comp = new Comp();
//var comp:MovieClip = new Comp();
comp.name = "comp";
comp.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
comp.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
comp.addEventListener(MouseEvent.CLICK, toggleClick);
comp.bstate = 0;
comp.buttonMode = true;
// Add Movie Clip "buttons" to stage
stage.addChild(comp);
comp.x = 120;
comp.y = 130;
// calls function frameloop
stage.addEventListener(Event.ENTER_FRAME, frameloop);
}
// function rolloverToggle
function rolloverToggle(e:MouseEvent) {
if (e.currentTarget.currentFrame == 1)
e.currentTarget.gotoAndStop(2);
if (e.currentTarget.currentFrame == 3)
e.currentTarget.gotoAndStop(4);
}
// function rolloutToggle
function rolloutToggle(e:MouseEvent) {
if (e.currentTarget.currentFrame == 2)
e.currentTarget.gotoAndStop(1);
if (e.currentTarget.currentFrame == 4)
e.currentTarget.gotoAndStop(3);
}
// function toggleClick
function toggleClick(e:MouseEvent) {
var houseArray:Object = {lightA: 1,
lightB: 1,
lightC: 1,
lightD: 1,
lightE: 1,
comp: 2,
tv: 3,
stove: 4,
laundry: 5};
var powerData:int = houseArray[e.currentTarget.name.toLowerCase()];
trace("movieClip Instance Name = " + e.currentTarget);
trace(powerData);
trace(houseArray[0]);
// how to find out which object selected
if (e.currentTarget.currentFrame == 2)
{
e.currentTarget.gotoAndStop(3);
e.currentTarget.bstate = 1;
}
if (e.currentTarget.currentFrame == 4)
{
e.currentTarget.gotoAndStop(1);
e.currentTarget.bstate = 0;
}
}
function frameloop(e:Event)
{
var outtext:String="";
outtext += comp.bstate +", ";
outfield.text = outtext;
}
}
}
答案 0 :(得分:0)
使用以下代码测试相同的代码:
comp = new MovieClip();
如果有效,您可能需要导入Comp类
答案 1 :(得分:0)
以下是一些潜在的问题:
1)我没有在任何地方看到Comp类的import语句。这是Flash中MovieClip的链接名称吗?否则,您需要导入它。
2)由于你在一个类中,当你为一个类创建属性时(基本上是由类的定义声明的变量,比如你的comp变量),你需要使用public或private关键字。而不是
var comp:MovieClip;
你会说:
private var comp:MovieClip;
3)DisplayObjects(comp.name)的name属性是READ-ONLY。你不能设置它。
4)您无法访问舞台,直到添加了ToggleTest。因此,在构造函数中为ADDED_TO_STAGE添加一个侦听器,然后将comp添加到舞台中。所以喜欢:
public function ToggleTest()
{
addEventListener(Event.ADDED_TO_STAGE, _added);
}
private function _added(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, _added);
comp = new Comp();
comp.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
comp.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
comp.addEventListener(MouseEvent.CLICK, toggleClick);
comp.bstate = 0;
comp.buttonMode = true;
comp.x = 120;
comp.y = 130;
// Add Movie Clip "buttons" to stage
stage.addChild(comp);
// calls function frameloop
stage.addEventListener(Event.ENTER_FRAME, frameloop);
}
答案 2 :(得分:0)
我已经接受了你的代码并尝试复制错误,但一切正常!这是我做的:
我没有得到任何错误,Comp实例被添加到舞台,外场显示了一些文字
点击Comp后,我得到了以下跟踪声明:
movieClip Instance Name = [object Comp]
2
undefined
由于,未定义是返回
trace(houseArray[0]);
houseArray是一个对象,因此我将trace语句更改为此
trace(houseArray[e.currentTarget.name]);
所以点击Comp:
movieClip Instance Name = [object Comp]
2
2
现在,我不明白你得到的错误。如果找不到Comp类,则会收到错误“调用可能未定义的方法Comp”。
似乎问题出在其他地方,试着像上面那样做,用最小的设置启动一个新项目,你不应该重现错误,然后添加新元素直到错误回来