我正在构建一个多人游戏,当连接到服务器时,服务器会发回一个可用房间列表(每个房间都有MaxPlayers,MinRank,TableId,TableName,Password),所以每当我收到这5个字符串时,我创建我创建的Mxml UI组件的一个实例,并用相关的详细信息填充它。
在main.MXML中,我添加了一个AS3脚本变量来保存我从服务器返回rcvd数据时创建的GameInstances对象:
private var gameInstances:ArrayCollection = new ArrayCollection();
GameInstance.mxml是一个组件,其中包含UI组件,AS3脚本用于设置一些数据。 在main.mxml:
中从服务器获取数据时var gameInstance:GameInstance = new GameInstance();
gameInstance.setTablePlayers(rcvdMsg[1]);
gameInstance.setTableMinRank(rcvdMsg[2]);
gameInstance.setTableId(rcvdMsg[3]);
gameInstance.setTableName(rcvdMsg[4]);
gameInstance.setTablePassword(rcvdMsg[5]);
gameInstances.addItem(gameInstance);
gameInstances包含该mxml组件的对象。 如何在main.mxml上显示该组件? 我有一个在main.mxml中,我想在其中直观地显示GameInstance对象。
这就是GameInstance.mxml的样子,我希望s:List为每个游戏保存一个像这样的UI对象(显示它的当前)
答案 0 :(得分:0)
如果我理解了这个问题,那么在ActionScript中创建组件时,必须先将它们添加到容器中,然后才能在UI中进行操作。如果您有一个组件数组,则可以遍历该数组并将每个组件作为子组件添加到容器中。主应用程序文件是一个容器,因此您可以执行以下操作:
for each(var myComp:UIComponent in myArrayList){
addChild(myComp);
}
采用这种方法是不寻常的。通常,您只需在创建父组件时将其添加到父容器中。
答案 1 :(得分:0)
好的,如果你使用gameInstances arraycollection作为tableList的数据提供者,那么你需要做一些事情。
首先,你需要制作你的gameInstances arraycollection [Bindable]
然后,您需要将数据添加到数组集合中,因为您发布的代码显示了您的数据。
接下来,您必须为tableList创建自定义项呈示器。
最后,当您完成从gameInstances arraycollection更改数据/添加/删除对象时,您需要gameInstances.refresh();
[编辑]
创建一个名为myListRenderer.mxml的文件并将此代码放入其中
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
override protected function commitProperties():void{
// this is where you assign your values
// this function gets called every-time the list scrolls
super.commitProperties();
players.text = this.data.setTablePlayers
minRank.text = this.data.setTableMinRank;
tableId.text = this.data.setTableId;
tableName.text = this.data.setTableName;
tablePassword.text = this.data.setTablePassword;
}
]]>
</mx:Script>
<mx:Label id="players" />
<mx:Label id="minRank" />
<mx:Label id="tableId" />
<mx:Label id="tableName" />
<mx:Label id="tablePassword" />
</mx:VBox>