Массивы с Actionscript3 - PullRequest
       48

Массивы с Actionscript3

0 голосов
/ 21 ноября 2018

Я относительно новичок в Actionscript3.Я пытаюсь сделать простой калькулятор, который берет разные значения из объектов текстового поля на сцене и умножает их, чтобы получить результат в других текстовых полях.Я пытаюсь это во Flash CS6. Снимок экрана файла .FLA .Как бы я реализовать следующий код с использованием массивов?

    var txtbox:TextFormat=new TextFormat();
    txtbox.size = 11;
    txtbox.bold = true;

    value1.setStyle("textFormat",txtbox);
    value2.setStyle("textFormat",txtbox);
    value3.setStyle("textFormat",txtbox);
    value4.setStyle("textFormat",txtbox);
    value5.setStyle("textFormat",txtbox);
  multiplier.setStyle("textFormat",txtbox);

    result1.setStyle("textFormat",txtbox);
    result2.setStyle("textFormat",txtbox);
    result3.setStyle("textFormat",txtbox);
    result4.setStyle("textFormat",txtbox);
    result5.setStyle("textFormat",txtbox);


 compute.addEventListener(MouseEvent.CLICK, calBtn);
    function calBtn(event:MouseEvent):void
    {
         var myArray:Array = int(value1),int(value2),int(value3),int(value4),int(value5)];

var m:Number=Number(multiplier.text);

var r1:Number = int((value1*m)*1000)/1000;
var r2:Number = int((value2*m)*1000)/1000;
var r3:Number = int((value3*m)*1000)/1000;
var r4:Number = int((value4*m)*1000)/1000;
var r5:Number = int((value5*m)*1000)/1000;

result1.text=String(r1);
result2.text=String(r2);
result3.text=String(r3);
result4.text=String(r4);
result5.text=String(r5);
     }

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Эта проблема теперь решена.Я разместил здесь код, чтобы другие с похожей проблемой могли использовать его в качестве ссылки.Я также разместил скриншот с результатом здесь .

var txtbox:TextFormat=new TextFormat();
txtbox.size = 11;
txtbox.bold = true;

var textInputs:Array = [value1,value2,value3,value4,value5];
var textOutputs:Array = [result1,result2,result3,result4,result5];

for (var i:Number=0; i<textInputs.length; i++)
{
    textInputs[i].setStyle("textFormat",txtbox);
}

multiplier.setStyle("textFormat",txtbox);

for (var j:Number=0; j<textOutputs.length; j++)
{
    textOutputs[j].setStyle("textFormat",txtbox);
}

compute.addEventListener(MouseEvent.CLICK, calBtn);
function calBtn(event:MouseEvent):void
{
    var m:Number=Number(multiplier.text);

for (var i:Number=0;i<textInputs.length;i++)
{
    var num:Number = Number(textInputs[i].text);
    textOutputs[i].text = String(int((num*m)*1000)/1000);
}
}
0 голосов
/ 22 ноября 2018

Ошибка, которую вы получаете, говорит вам, что вы используете TextInput, как будто это Number.

Просматривая ваш код, мы видим, что это действительно так:

int(value1)  //value1 presumably is a TextInput, and can't be converted to an int

//and later...
int((value1*m) //value1 is a TextInput, and can't be multiplied

Что вам нужно сделать, это сначала преобразовать текстовое свойство TextInput в число, а затем выполнить математику.(точно так же, как вы в настоящее время делаете с текстовым полем множителя)

int(value1.text) * m

Однако есть несколько других проблем с вашим кодом, например, как вы создаете свой массив.Вот потенциальный рефакторинг

var txtbox:TextFormat = new TextFormat();
    txtbox.size = 11;
    txtbox.bold = true;

//put all the text inputs and in an array so you don't have to repeat the same code so much
var textInputs:Array = [value1,value2,value3, value4, value5];
var textOutputs:Array = [result1, result2, result3, result4, result5];

//set the style in a for loop
for(var i:int=0;i<textInputs.length;i++){
    textInputs[i].setStyle("textFormat",txtbox);
}

multiplier.setStyle("textFormat",txtbox);

compute.addEventListener(MouseEvent.CLICK, calBtn);

function calBtn(event:MouseEvent):void
{
    var m:Number=Number(multiplier.text);
    //make sure the multiplier is a valid number
    if(isNaN(m)){
        //do something here to tell the user they entered something invalid
        return; //don't keep going in this function
    }

    //loop through each text input
    for(var i:int=0;i<textInputs.length;i++){
        //convert text input value to number
        var num:Number = int(textInputs[i].text);

        //check if the input is valid
        if(!isNaN(num)){
            textOutputs[i].text = String( (num * 1000) / 100 );
        }else{
            textOutputs[i].text = "Invalid Number";
        }
    }
 }
...