Actionscript 3.0问题 - 即使我重新检查代码,为什么它会出错?

时间:2011-09-02 12:11:56

标签: actionscript-3

我正在为此Actionscript 3.0项目使用Adobe Flash CS4专业版 (http://tutorials.flashmymind.com/2009/02/rotating-menu-via-actionscript-3/

我甚至尝试遵循评论中的建议,但此错误始终显示: TypeError:错误#1010:术语未定义且没有属性。     在rotating_menu_fla :: MainTimeline / frame1() (有关完整的详细信息,请点击链接 - http://i429.photobucket.com/albums/qq19/tsujzpie/screenshot_03.jpg

我一直在关注本教程的每一步,但我对编码感到困惑...... 这是代码的代码......

//Save the center coordinates of the stage
var centerX:Number=stage.stageWidth/2;
var centerY:Number=stage.stageHeight/2;
 //The number of items we will have (feel free to change!)
var NUMBER_OF_ITEMS:uint=5;
 //Radius of the menu circle (horizontal and vertical)
var radiusX:Number=200;
var radiusY:Number=100;
 //Angle difference between the items (in radians)
var angleDifference:Number = Math.PI * (360 / NUMBER_OF_ITEMS) / 180;
 //How fast a single circle moves (we calculate the speed
//according to the mouse position later on...)
var angleSpeed:Number=0;
 //Scaling speed of a single circle
var scaleSpeed:Number=0.0002;
 //This vector holds all the items
//(this could also be an array...)
var itemVector:Array = new Array ('1', '2', '3', '4','5');
 //This loop creates the items and positions them
//on the stage
for (var i:uint = 0; i < NUMBER_OF_ITEMS; i++) {
    //Create a new menu item
    var item:Item = new Item();
    //Get the angle for the item (we space the items evenly)
    var startingAngle:Number=angleDifference*i;
    //Set the x and y coordinates
    item.x=centerX+radiusX*Math.cos(startingAngle);
    item.y=centerY+radiusY*Math.sin(startingAngle);
    //Save the starting angle of the item.
    //(We have declared the Item class to be dynamic. Therefore,
    //we can create new properties dynamically.)
    item.angle=startingAngle;
    //Add an item number to the item's text field
    item.itemText.text=i.toString();
    //Allow no mouse children
    item.mouseChildren=false;
    //Add the item to the vector
    itemVector.push(item);
    //Add the item to the stage
    addChild(item);
}
 //We use ENTER_FRAME to animate the items
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 //This function is called in each frame
function enterFrameHandler(e:Event):void {
    //Calculate the angle speed according to mouse position
    angleSpeed = -(mouseX - centerX) / 5000;
    //Loop through the vector
    for (var i:uint = 0; i < NUMBER_OF_ITEMS; i++) {
        //Save the item to a local variable
        var item:Item=itemVector[i];
        //Update the angle
        item.angle+=angleSpeed;
        //Set the new coordinates
        item.x=centerX+radiusX*Math.cos(item.angle);
        item.y=centerY+radiusY*Math.sin(item.angle);
        //Calculate the vertical distance from centerY to the item
        var dy:Number=centerY-item.y;
        //Scale the item according to vertical distance
        item.scaleY = (dy / radiusY)+2;
        //Set the x scale to be the same as y scale
        item.scaleX=item.scaleY;
        //Adjust the alpha according to y scale
        item.alpha=item.scaleY+1.1;
    }
}

我发现它很奇怪 - 可能是代码是正确的但我不知道这些步骤是否搞砸了项目......

3 - Convert the circle into a movie clip... 
4 - In the “Item” movie clip, create a dynamic text field in the center of the circle (in a     new layer).
5 - Set the text to align center. Type some number in the text field. Give the text field an instance name of “itemText”. Embed numerals...
6 - Remove the Item movie clip from the stage. We will create all the items dynamically via ActionScript 3.

我可以提供更多截图,但由于我是新用户,我最多只允许两个 - 与此标记相反,我不是在做Android应用。 (一旦有人回答这个问题,我会给你补充信息......)

我不得不承认,第3步到第6步令人困惑,对我来说没有意义 - 特别是第六步,当你必须从舞台上删除影片剪辑时。对我来说,如果我这样做,脚本会起什么作用呢?

知道我做错了什么吗?

编辑: 谢谢,我意识到自己的错误 - 感谢提示: - )

但是现在,我尝试修改本教程的代码,让单词出现在圆圈内(如“Home”,“About”等等),就像我在行中键入的那样屏幕图 - http://i429.photobucket.com/albums/qq19/tsujzpie/modifiedlineincode_00.jpg

但是,尽管我认为我所做的是适当的改变,但仍然出现了错误 - (请在此处查看 - http://i429.photobucket.com/albums/qq19/tsujzpie/newerrorincode_00.jpg

为什么会这样?在我忘记之前,我必须在代码的哪一部分插入一行,使点击的按钮显示与之对应的信息? (也就是说,如果我点击“联系人”或任何按钮,舞台上的菜单下方会出现一个窗口...)

2 个答案:

答案 0 :(得分:3)

错误意味着ActionScript不知道Item是什么。确保您已在库中的Item MovieClip上勾选了Action for Action,并且该类也被命名为Item。

<强>更新 你所关注的教程提到了itemVector是一个Item实例的Vector,不是一个Strings数组,就像你代码建议的那样。这就是为什么你得到屏幕截图中显示的错误。这意味着ActionScript无法将Item转换为String。 一个简单的解决方法是为菜单项标签创建另一个数组:

var itemVector:Array = [];// = new Array ('1', '2', '3', '4','5');
var itemLabels:Array = ["Home","About","Contact","Gallery"];
NUMBER_OF_ITEMS = itemLabels.length;

并在for循环中为此item.itemText.text=i.toString();

交换此tem.itemText.text=itemLabels[i];

似乎你没有完全掌握变量类型之间的区别。我建议在继续前进之前熟悉as3的基础知识。同时更加注意您的代码并充分理解您使用其他人编写的代码将使您免于麻烦。但是,您仍会遇到错误。您可以在Flash Error Database上找到有关这些错误的解释。

关于Carosel教程,请查看this video。这可能有助于更好地解释事情。

答案 1 :(得分:0)

编译器找不到Item类 进入您的图书馆并打开“项目”MovieClip的属性 验证是否已设置为导出到actionscript。