2013-09-25 29 views
0

正如标题所说,我需要找到一种方法来执行此代码,但以更有效的方式。AS3,如何做一个循环而不是使用所有这些IF语句

if (texten.texten.numLines < 3) 
    { 
    texten.texten.y = 0; 
    texten.texten.height = 118; 
    } 
    if (texten.texten.numLines == 3) 
{ 
    texten.texten.y =- 59; 
    texten.texten.height = 177; 
} 
else if (texten.texten.numLines == 4) 
{ 
    texten.texten.y =- 118; 
    texten.texten.height = 236; 
} 
else if (texten.texten.numLines == 5) 
{ 
    texten.texten.y =- 177; 
    texten.texten.height = 295; 
} 
else if (texten.texten.numLines == 6) 
{ 
    texten.texten.y =- 236; 
    texten.texten.height = 354; 
} 
else if (texten.texten.numLines == 7) 
{ 
    texten.texten.y =- 295; 
    texten.texten.height = 413; 
} 
else if (texten.texten.numLines == 8) 
{ 
    texten.texten.y =- 354; 
    texten.texten.height = 472; 
} 
else if (texten.texten.numLines == 9) 
{ 
    texten.texten.y =- 413; 
    texten.texten.height = 531; 
} 
else if (texten.texten.numLines == 10) 
{ 
    texten.texten.y =- 472; 
    texten.texten.height = 590; 
} 

正如你所看到的,这个代码将降低文本框(texten.texten一个影片剪辑中的文本字段我),并提高了它的高度(让文本跳起来每当添加一个新行)

回答

0

我看到三种方式现在这样做的权利,一个通用的方法使用一个循环,而另一个没有一个循环,并根据您的实际情况具体之一:

通用的方法(带环): 这是低效率的方法,我只提到它,因为你专门问为一个循环。 要更换的,如果/ ELSEIF像这样的,你可以使用数组来存储你的数据的列表,丹斯循环通过它们来测试值:

// we store the numbers in tree Arrays 
var lineValues:Array = [2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var yValues:Array = [0, -59, -118, -177, -236, -295, -354, -413, -472]; 
var heightValues:Array = [118, 177, 236, 295, 354, 413, 472, 531, 590]; 

// we store and limit the numLines value to valid (for us) values 
var numLines:Number = texten.texten.numLines; 
numLines = (numLines > 10 ? 10 : (numLines < 2 ? 2 : numLines)); 

// here, we loop 
for (var i:Number = 0; i < lineValues.length; i++) { 
    if (lineValues[i] == numLines) { 
    texten.texten.y = yValues[i]; 
    texten.texten.height = heightValues[i]; 
    } 
} 

用的一般方法(无环路): 这方法使用与以前相同的基础:将数据存储在Array中,然后访问它。但在这里,我们直接访问它。

// we store the numbers in two Arrays (no need for lineValues !) 
var yValues:Array = [0, -59, -118, -177, -236, -295, -354, -413, -472]; 
var heightValues:Array = [118, 177, 236, 295, 354, 413, 472, 531, 590]; 

// we store and limit the numLines value to valid (for us) values 
var index:Number = texten.texten.numLines; 
index = (index > 10 ? 10 : (index < 2 ? 2 : index)); 

// index is in [2 -> 10]. Let's move it to [0 -> 8] 
index -= 2; 

// And that's it ! 
texten.texten.y = yValues[index]; 
texten.texten.height = heightValues[index]; 

的具体方法(无环,无阵列): 在你的情况中,我们可以看到,对于每行中的值使用59增量。所以,我们可以使用numLines来计算位置。

// we store and limit the numLines value to valid (for us) values 
var numLines:Number = texten.texten.numLines; 
numLines = (numLines > 10 ? 10 : (numLines < 2 ? 2 : numLines)); 

// and that's all 
texten.texten.y = -((numLines-2)*59); 
texten.texten.height = numLines*59 
+0

非常感谢! :)我尝试了他们三个,他们都完美地完成了。 –

2

我不认为你需要一个循环。有似乎是一个模式,其中它大致是这样的: (只写了我的头顶部,没有测试)

if(texten.texten.numLines > 2){ 
    texten.texten.y = -59 * (texten.texten.numLines - 2); 
    texten.texten.height = 118 + (59 * (texten.texten.numLines - 2)); 

} else { 
    texten.texten.y = 0; 
    texten.texten.height = 118; 
} 
+0

+1好地方:) –

+0

嗨,不错的代码,但是现在如果我上面的两行文字,整个文本框只是天上飞了起来。 –

+1

它应该是“= -59”而不是“ - = 59” – finalman