У меня проблема с чистым ActionScript 3, но я подготовил упрощенный тестовый пример во Flex 4 для лучшей наглядности (исходный код ниже):
Поскольку Flash Player 11 / AIR 3 изначально поддерживает JSON, я решил перенести многопользовательскую игру, в которой для связи с сервером используется XML,
Но у меня есть неприятная проблема, связанная с двумя такими объектами, как
{ 9013: [
"OK305894249541",
"OK151358069597",
"OK515549948434",
] },
{ 8991: [
"OK253525117889",
"OK529081480134",
] },
Я не знаю как создать функцию ActionScript, которая выдала бы 3 для первого объекта и 2 для второго объекта?
"9013 "и" 8991 "в приведенном выше примере являются номерами игр.
Строки" OKxxxx "представляют игроков.
Игра" полная ", если в ней 3 игрока, в противном случае" свободная ".
Вот мой очень простой TestCase.mxml :
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init(event)">
<fx:Declarations>
<s:RadioButtonGroup id="_filter" change="handleRadio(event);" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
[Bindable]
private var _games:ArrayCollection = new ArrayCollection();
[Bindable]
private var _all:uint = 0;
[Bindable]
private var _vac:uint = 0;
[Bindable]
private var _full:uint = 0;
private function vacantGame(obj:Object):Boolean {
// XXX how to implement?
// XXX return true if obj has less than 3 players
return true;
}
private function fullGame(item:Object):Boolean {
// XXX how to implement?
// XXX return true if obj has exactly 3 players
return true;
}
private function init(event:FlexEvent):void {
var i:uint;
_games.source = OBJ['games'];
_all = _games.length;
_vac = 0;
for (i = 0; i < _games.length; i++)
if (vacantGame(_games[i]))
_vac++;
_full = 0;
for (i = 0; i < _games.length; i++)
if (fullGame(_games[i]))
_full++;
}
private function handleRadio(event:Event):void {
switch (_filter.selection) {
case _allBtn:
_games.filterFunction = null;
break;
case _vacBtn:
_games.filterFunction = vacantGame;
break;
case _fullBtn:
_games.filterFunction = fullGame;
break;
}
_games.refresh();
}
private const OBJ:Object = {
lobby: [
"OK108900197210",
"OK266559712237",
"DE6577",
"DE7981",
"OK225312168135",
"OK20629248715",
"DE7880",
],
games: [
{ 0: [] },
{ 9012: [
"VK48058967",
"MR14315189992643135976",
"OK10218913103",
] },
{ 9013: [
"OK305894249541",
"OK151358069597",
"OK515549948434",
] },
{ 8991: [
"OK253525117889",
"OK529081480134",
] },
{ 8937: [
"OK304672497140",
"VK90145027",
"OK338360548262",
] },
{ 9005: [
"OK40798070412",
"DE7979",
"OK531589632132",
] },
{ 9010: [
"OK357833936215",
] },
]
};
]]>
</fx:Script>
<s:HGroup verticalAlign="baseline">
<s:Label text="Games:" />
<s:RadioButton id="_allBtn" group="{_filter}" label="All: {_all}" selected="true" />
<s:RadioButton id="_vacBtn" group="{_filter}" label="Vacant: {_vac}" />
<s:RadioButton id="_fullBtn" group="{_filter}" label="Full: {_full}" />
</s:HGroup>
</s:Application>