2011-12-30 2 views
1

Я нашел этот код онлайн, и он достиг определенного движения, которое я хочу использовать. К сожалению, он использует числовые значения вместо текста. Я выполнил все его инструкции, но я попытался заменить Vector массивом и получил ошибку. Ошибка, которую я получал, это «1199: введите параметры с непараметрированным типом». Это потому, что я добавил значение массива вместо вектора, который сделал этот парень. То, что он имеет в своем учебнике, соответствует числовым значениям. Также он создал класс .as под названием Item.as. Вот код AS, который находится в основной временной шкале в новом слое под названием действия моего файла .fla называется rotate.fla:AS3 Вращающийся текст вокруг исправленного изображения

//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=6; 

    //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.<Item>=new Array('1', '2', '3', '4', '5').<Item>; 

    //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 dymamic. 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); 

    //If we are above centerY, double the y scale 
    if (item.y<centerY) { 
     item.scaleY*=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; 

    } 



     } 

    } 

Кроме того, как указано есть .as класс называется Item.as. Это находится в отдельном файле. Код выглядит следующим образом:

package { 
import flash.display.MovieClip; 
public dynamic class Item extends MovieClip { 
    public function Item() { 
     } 
     } 
    } 

Если вы будете следовать его указаниям, он будет работать для числового значения, но я хочу использовать массив и поместить строковые значения из массива внутри клипа Item фильма, где вы увидите, что числовые значения находятся внутри формы круга. У меня есть ссылка на его руководство по поворотному меню, где это 9 шагов. Вот ссылка:

Rotating Menu

Спасибо всем за вашу помощь. Я только что вернулся в ActionScript/Flash

ответ

0

Erk, просто прочитайте учебник, к которому вы привязались, и переход от Vector к Array (что я не рекомендую), по-видимому, является наименьшей из ваших проблем. Я предлагаю вам оставить его как Vector (он более эффективен, и статический ввод не делает ничего, кроме помощи в этом случае) и оставляет большую часть кода как есть. Код, который нужно изменить это:

//Add an item number to the item's text field 
item.itemText.text=i.toString(); 

item.itemText.text фактически держит String, так что вы в незашифрованном там. Что происходит, так это то, что вы конвертируете i (индекс этого Item в вектор) в String, чтобы он отображался. Теперь вам нужно изменить его, чтобы он показывал, чего вы хотите.

Существует множество способов сделать это - поскольку вы используете Flash-программу, вы можете использовать встроенный материал! Поскольку ItemMovieClip распространяется, вы можете заменить строку раньше с:

//Changes the item's frame to the same as its index 
item.gotoAndStop(i); 

Тогда в среде разработки (Flash) позволяют иметь различную структуру для каждого пункта меню.

Надеюсь, это поможет!

Я оставил в своем описании, как перейти от Vector к массиву ниже, на всякий случай, если у вас есть причина сделать это. Примечание: то, что я сказал выше, предполагает, что вы НЕ сделали эту модификацию.


Я не прочитал все, что код, но это выглядит как вопрос здесь:

//This vector holds all the items 
//(this could also be an array...) 
var itemVector:Array.<Item>=new Array('1', '2', '3', '4', '5').<Item>; 

Синтаксис .<Item> работает только для векторов, так что вам нужно, чтобы избавиться от этого ,Эта строка будет выглядеть следующим образом для массива:

var itemVector:Array = new Array('1', '2', '3', '4', '5'); 

код может иметь больше проблем, но это конкретно касается ошибки вы упоминаете.

+0

Эй, это работает для меня. Большое спасибо за это. Еще один вопрос для вас. Когда я запускаю его, он показывает повторяющееся значение (скажем, буква a появляется дважды), является ли это внутри значения цикла, когда оно показывает количество элементов? – DC724

+0

Я не совсем понимаю, что вы подразумеваете под двойным значением. Где он появляется? – 31eee384

+0

Появляется после запуска анимации. Поэтому скажем, что у меня размер вектора 9, и значение отображается в 0 и 1 позиции (0 = "a" 1 = "a"). Не могли бы вы написать для каждого цикла для проверки повторяющихся значений в векторе и выталкивать одно из повторяющихся значений. – DC724