Actionscript 3 通过循环迭代,文本字段的动态Y位置
我有一个名为Actionscript 3 通过循环迭代,文本字段的动态Y位置,actionscript-3,flash-cs6,Actionscript 3,Flash Cs6,我有一个名为dataLoaded的函数,它有多个循环,通过一个充满成分项的嵌套数组。其目的是将数组中的每个项插入到构成滚动列表一部分的文本字段中。我的数组结构如下: public var so:SharedObject = SharedObject.getLocal("mySharedObject"); public var meat_items_array:Array = new Array(so.data.meat1, so.data.meat2, so.data.meat3); publi
dataLoaded
的函数,它有多个循环,通过一个充满成分项的嵌套数组。其目的是将数组中的每个项插入到构成滚动列表一部分的文本字段中。我的数组结构如下:
public var so:SharedObject = SharedObject.getLocal("mySharedObject");
public var meat_items_array:Array = new Array(so.data.meat1, so.data.meat2, so.data.meat3);
public var carb_items_array:Array = new Array(so.data.carbs1, so.data.carbs2, so.data.carbs3);
public var other_items_array:Array = new Array(so.data.other1, so.data.other2, so.data.other3);
public var mealtype_items_array:Array = new Array(so.data.mealtype1, so.data.mealtype2, so.data.mealtype3);
public var cuisine_items_array:Array = new Array(so.data.cuisine1, so.data.cuisine2, so.data.cuisine3);
public var veg_items_array:Array = new Array(so.data.veg1, so.data.veg2, so.data.veg3);
public var master_array:Array = new Array(meat_items_array, carb_items_array, other_items_array, mealtype_items_array, cuisine_items_array, veg_items_array);
这是我的数据加载
函数:
private function dataLoaded():void
{
for ( var masterCounter:int = 0; masterCounter < master_array.length; masterCounter++ )
{
for (var nestedCounter:int=0;nestedCounter<master_array[masterCounter].length;nestedCounter++)
{
var txt:String = master_array[masterCounter][nestedCounter];
if (txt==null) continue;
populateItem(txt,nestedCounter);
}
}
}
我不完全清楚您试图做什么,但假设此代码只运行一次,这应该可以满足您的需要:
_item.y = _container.height + padding; //this will always put the next item at the bottom of the container after the previous one (padding can be any number you want)
这是如何工作的,假设您有3个对象,在循环中按顺序添加到container
,并为每个项指定container.height
的y值。我们还假设每个项目的高度为10:
循环1:
- 集装箱高度为
0
(因为目前集装箱内没有任何物品)
因此,item1的y
是0
- 在
container.addChild(item1)
container之后
高度变为10(项目1的高度)
循环2:
- 项目2的
y
设置为container.height,目前为10
- 在
container.addChild(项目2)
之后,容器高度变为20
循环3:
- 项目3的
y
设置为container.height,目前为20
- 在
container.addChild(项目3)
之后,容器高度变为30
如果您的代码被多次运行(因此\u container
中已经有对象),那么只要在需要重新排列时运行如下函数即可:
function orderItem():void {
var padding:int = 5; //5 pixel gap between items
var tmpY:Number = 0;
var tmpItem:DisplayObject;
for(var i:int=0;i<_container.numChildren;i++){
tmpItem = _container.getChildAt(i);
tmpItem.y = tmpY;
tmpY += tmpItem.height + padding;
}
}
并将其放入项的构造函数中,然后作为构造函数参数传入txt
,您不显示如何设置/更新\u itemPosition
,您只是希望所有项都按顺序垂直对齐吗?@londondruges\u MediaServices是,但是我有一种感觉,我的函数结构会阻碍任何简单的解决方案。我最初将本教程改编为滚动列表:容器将所有项目放在一起,我不知道如何使用它将项目放置在彼此下方?如果所有对象都是同一容器的子对象,那其实很容易!我会更新我的答案来解释它是如何工作的是的,它们都是_容器的子容器。所有滚动列表元素之间的关系是_container>\u item>\u itemtextfield非常感谢,这很好地解释了问题。我现在就实施这个,嗯,很抱歉,我无法让你的解决方案工作。我试图将textField.y值设置为_container.height,但它只是在项目之间留下了巨大的空间。对你们来说,更容易了解出了什么问题的方法是,若我只是把你们链接到我网站上我的项目的一个zip地址。在我发布问题之前,我已经回滚了我所做的更改,以便您了解游戏状态()
function orderItem():void {
var padding:int = 5; //5 pixel gap between items
var tmpY:Number = 0;
var tmpItem:DisplayObject;
for(var i:int=0;i<_container.numChildren;i++){
tmpItem = _container.getChildAt(i);
tmpItem.y = tmpY;
tmpY += tmpItem.height + padding;
}
}
_item.item_btn_over.alpha = 0;
_itemTextField = new TextField();
_itemTextField.x = _textFieldXPosition;
_itemTextField.y = _textFieldYPosition
_itemTextField.text = txt;
//adds textfield to displaylist//
_item.addChild(_itemTextField);