0

正如标题所说,我需要找到一种方法来执行此代码,但要以更有效的方式。

    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 是我在movieClip 中的文本字段)并提高它的高度(每当添加新行时使文本向上跳)

4

2 回答 2

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;
}
于 2013-09-25T08:10:06.410 回答
0

我现在看到了三种方法,一种使用循环的通用方法,另一种没有循环的方法,以及基于您的实际情况的特定方法:

通用方法(带循环): 这是效率较低的方法,我之所以提到它只是因为您特别要求使用循环。要替换这样的 if/elseif 列表,您可以使用数组来存储您的数据,dans 循环遍历它们以测试值:

// 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];
  }
}

通用方法(无循环): 此方法使用与前一个相同的基础:将数据存储在一个数组中,然后访问它。但是在这里,我们直接访问它。

// 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
于 2013-09-25T08:26:16.793 回答