0

ユーザーがログインして現在のプレイヤーのリストを表示するオンライン ゲームを作成しています。ユーザーが「ルーム」に入ると、そのルームの User オブジェクトとしてユーザーのリストを持つ Room オブジェクトを含む SFSEvent が送出されます。そのイベントのコールバック関数として、配列である現在のユーザーのリストを取得し、ビュー スタックの子インデックスを切り替えてから、ユーザー リスト配列を ArrayList にラップしてから、それを MXML Spark List コンポーネントの dataSource に割り当てます。これが私のコードです:

私の Actionscript コード セクション (PreGame.as):

private function onRoomJoin(event:SFSEvent):void
{
    const room:Room = this._sfs.getRoomByName(PREGAME_ROOM);

    this.selectedChild = waitingRoom;

    /** I know I should be using event listeners
     *  but this is a temporary fix, otherwise
     *  I keep getting null object errors
     *  do to the li_users list not being
     *  created in time for the dataProvider assignment **/
    setTimeout(function ():void {
        const userList:ArrayList = new ArrayList(room.userList);
        this.li_users.dataProvider = userList;  // This is where the error gets thrown
    },1000);
}

私のMXMLコード:

<?xml version="1.0" encoding="utf-8"?>
    <mx:ViewStack xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx"
        initialize="preGame_initializeHandler(event)"
        >

        <fx:Script source="PreGame.as"/>

        <s:NavigatorContent id="nc_loginScreen">

            /** Login Screen Code **/

        </s:NavigatorContent>

        /** Start of Waiting Room code **/
        <s:NavigatorContent id="waitingRoom">
            <s:Panel id="pn_users"
                     width="400" height="400"
                     title="Users">

                /** This is the List in question **/
                <s:List id="li_users"
                        width="100%" height="100%"/>

            </s:Panel>
        </s:NavigatorContent>
    </mx:ViewStack>

ただし、次のエラーが発生し続けます。

TypeError: Error #1010: A term is undefined and has no properties

私が間違っていることはありますか?arrayList にはデータがあるため、空/null ではないことがわかっています。

4

1 に答える 1

0

Use data binding to solve the timing problem:

<s:List id="li_users" dataProvider="{users}" width="100%" height="100%"/>

Then in your script:

[Bindable]
public var users:ArrayList;

private function onRoomJoin(event:SFSEvent):void
{
    public room:Room = this._sfs.getRoomByName(PREGAME_ROOM);
    this.selectedChild = waitingRoom;
    users = new ArrayList(room.userList);
}
于 2012-11-10T22:55:30.900 に答える