Actionscript 3 如何合并两个变量的内容
我有许多字符串变量,以“Question”开头,然后以数字结尾。(“问题1”) 每个变量都有一个问题(“它说了多少次E?”) 舞台上有一个可编辑的文本框,用户可以在其中键入他希望在不同文本框中显示的问题编号。("1") 当用户单击按钮时,我希望文本框中显示问题1的文本。 我的代码如下所示:Actionscript 3 如何合并两个变量的内容,actionscript-3,flash,Actionscript 3,Flash,我有许多字符串变量,以“Question”开头,然后以数字结尾。(“问题1”) 每个变量都有一个问题(“它说了多少次E?”) 舞台上有一个可编辑的文本框,用户可以在其中键入他希望在不同文本框中显示的问题编号。("1") 当用户单击按钮时,我希望文本框中显示问题1的文本。 我的代码如下所示: var Question1:String = "How many times does it say E?" ; var Question2:String = "How many times does it
var Question1:String = "How many times does it say E?" ;
var Question2:String = "How many times does it say B?" ;
var Question3:String = "How many times does it say A?" ;
myButton.addEventListener(MouseEvent.CLICK, displayQuestion);
function displayQuestion(event:MouseEvent):void
{
var QuestionNumber:Number = Number(userInputQuestionNumber.text);
textBoxDisplayQuestion.text= Question(QuestionNumber);
}
如何让textBoxDisplayQuestion显示问题的实际文本??
(我现在的代码显然不起作用!!)
但这个例子似乎不起作用:我创建了一个名为Question的类,下面是代码:
import Question;
var QuNoLoad:Number;
var Qu1:Question = new Question(1,"how","yes","no","maybe","so","AnsB","AnsA");
trace(Qu1.QuNo, Qu1.Qu, Qu1.AnsA,Qu1.AnsB, Qu1.AnsC, Qu1.AnsD, Qu1.CorAns, Qu1.FaCorAns);
//the following is the code for the button
loadQu.addEventListener(MouseEvent.CLICK, loadQuClick);
function loadQuClick(event:MouseEvent):void
{
//this sets the variable "QuNoLoad" with the contents of the "textBoxQuLoad"
//imagine the user inputed "1"
QuNoLoad=Number(textBoxQuLoad.text);
//this SHOULD!! display the contents of "Qu1.Qu"
textQu.text= this["Qu"+QuNoLoad.toString()+".Qu"]
//and when i traced this statment the value was "undefined"
}
为什么???您可以使用方括号
[]
运算符按名称引用变量,例如:
this["Question" + QuestionNumber.toString()]
可以使用此运算符动态设置和检索对象属性的值
将问题编号保持为整数,则函数为:
var Question1:String = "How many times does it say E?" ;
var Question2:String = "How many times does it say B?" ;
var Question3:String = "How many times does it say A?" ;
function displayQuestion(event:MouseEvent):void
{
var QuestionNumber:uint = uint(userInputQuestionNumber.text);
textBoxDisplayQuestion.text = this["Question" + QuestionNumber.toString()];
}
您可以使用方括号
[]
运算符按名称引用变量,例如:
this["Question" + QuestionNumber.toString()]
可以使用此运算符动态设置和检索对象属性的值
将问题编号保持为整数,则函数为:
var Question1:String = "How many times does it say E?" ;
var Question2:String = "How many times does it say B?" ;
var Question3:String = "How many times does it say A?" ;
function displayQuestion(event:MouseEvent):void
{
var QuestionNumber:uint = uint(userInputQuestionNumber.text);
textBoxDisplayQuestion.text = this["Question" + QuestionNumber.toString()];
}
这是编程中的一个非常基本的概念,在你理解它之前,它会使很多事情变得更加困难,如果不从一些基础开始,很难解释: 这里发生的事情最容易用普通的
对象而不是类来讨论,所以让我们从一个非常简单的例子开始:
var question1:Object = new Object();
question1.number = 1;
请注意,使用对象
时,您不必说编号
提前存在,它在设置时创建。现在,当你说question1.number
时,很明显你得到了1。然而,首先question1
获取存储在变量question1
(即{number:1}
)中的值,然后.number
获取存储在该值中的属性number
中的值:1
为了节省一些输入,您可以使用称为“对象文字”的速记:
现在,让我们尝试一个更复杂的对象:
var question1 = {
number: 1,
text: "How many times does it say A?",
answers: {
a: 1,
b: 2,
c: 3,
d: 4,
correct: "b"
}
};
现在,问题1
是一个具有3个属性的对象,其中一个,回答
,是一个具有5个属性的对象:a
、b
、c
、d
和更正
。这也可以写成:
var question1 = new Object();
question1.number = 1;
question1.text = "How many times does it say A?";
question1.answers = new Object();
question1.answers.a = 1;
question1.answers.b = 2;
question1.answers.c = 3;
question1.answers.d = 4;
question1.answers.correct = "b";
现在应该很清楚为什么存在文本语法了
这一次,如果你说question1.answers.correct
你得到“b”
:首先question1
得到{number:1,
..}
值,然后.answers
得到{a:1,b:2,
..}
值,最后.correct
得到值
您还应该知道,这个
是一个特殊的变量,在ActionScript(以及它所基于的JavaScript)中具有特定的含义:当您编写的代码在其中时,它广义上指的是中的对象:对于“全局”代码(而不是在函数中
),var
将属性添加到此对象:var number=2
和this.number=2
在这里是相同的。(当您使用函数时,这是不正确的,此
在那里的行为不同,有时非常奇怪,所以要小心!)
现在,您可能开始看到发生了什么:当您使用[]
时,例如,question1[“number”]
,而不是question1.number
,您将要获取的属性名称作为字符串
值传递,这意味着您可以在运行时更改获得的属性,而不是在编译时(“运行时”与“编译时”),但它还可以让您获得使用
语法无法引用的名称的属性
var strange = {
"a strange name? That's OK!": 1
};
trace(strange["a strange name? That's OK!"]);
因此,当您编写这个[“Qu”+qunload.toString()+“.QuNo”]
时,您创建了一个类似“Qu2.QuNo”
的名称,例如,您试图获得一个包含该确切名称的属性,
,而该属性并不存在!你试图做的事情与:Qu2.QuNo
可以写成this[“Qu”+qunload].QuNo
但是,我不应该在这里不说,对于类似的东西,我会使用数组,它的存在使您可以使用单个名称来存储值列表:
var questions:Array = [ // set questions to an array with multiple questions
new Question(...),
new Question(...),
...
];
for each (var question:Question in questions) { // Look at each question in the array
if (question.QuNo == textBoxQuLoad.text) { // If this is the right question
loadQuestion(question);
break; // Found it, stop looking at each question by "breaking out" of the for each
}
}
使用数组可以做的事情还有很多,所以有时间的时候请仔细阅读它们。这是编程中一个非常基本的概念,它会让很多事情在你理解它之前变得更加困难,如果不从一些基础工作开始,就很难解释:
这里发生的事情最容易用普通的对象而不是类来讨论,所以让我们从一个非常简单的例子开始:
var question1:Object = new Object();
question1.number = 1;
请注意,使用对象
时,您不必说编号
提前存在,它在设置时创建。现在,当你说question1.number
时,很明显你得到了1。然而,首先question1
获取存储在变量question1
(即{number:1}
)中的值,然后.number
获取存储在该值中的属性number
中的值:1
为了节省一些输入,您可以使用称为“对象文字”的速记:
现在,让我们尝试一个更复杂的对象:
var question1 = {
number: 1,
text: "How many times does it say A?",
answers: {
a: 1,
b: 2,
c: 3,
d: 4,
correct: "b"
}
};
现在,问题1
是一个具有3个属性的对象,其中一个,回答
,是一个具有5个属性的对象:a
、b
、c
、d
和更正
。这也可以写成:
var question1 = new Object();
question1.number = 1;
question1.text = "How many times does it say A?";
question1.answers = new Object();
question1.answers.a = 1;
question1.answers.b = 2;
question1.answers.c = 3;
question1.answers.d = 4;
question1.answers.correct = "b";
应该很清楚为什么存在文本语法