Я делаю программу, которая добавляет игроков на сцену, и я могу добавлять или вычитать очки. Я думаю, что я близок к завершению, за исключением нескольких вещей, я не могу видеть имена игроков на экране, и у меня проблемы с отображением баллов. Оценки увеличиваются и уменьшаются при нажатии кнопок, но ярлык на дисплее не отображает их. Вот моя вся программа прямо сейчас. Это немного грязно, поэтому я заранее извиняюсь.Управление данными XML через Flex
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="init()">
<fx:Style source="style.css.css"/>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<fx:XML id="playerData" source="data/data.xml" />
<s:XMLListCollection id="playerList" source="{playerData.player}" />
</fx:Declarations>
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
s|Button { color:#F2E9E9; }
s|Label { color:#f2e9e9; }
#outterBorder { backgroundColor:F7FEF9; }
</fx:Style>
<s:BorderContainer id="outterBorder" x="328" y="48" width="307" height="547">
<s:Image x="269" y="10"/>
<s:Label x="25" y="19" width="107" height="21" text="Score Keeper" color="#000000"/>
<s:BorderContainer id="innerBorder" x="10" y="58" width="285" height="477">
<s:TextInput id="myTextBox" x="10" y="425" width="138" />
<s:Button id="add" x="176" y="425" width="97" label="Add Player" click="addPlayer()" />
<s:HGroup id="group1" x="10" y="10" width="263" height="92" >
</s:HGroup>
<s:HGroup id="group2" x="10" y="114" width="264" height="92">
</s:HGroup>
<s:HGroup id="group3" x="10" y="214" width="263" height="92">
</s:HGroup>
<s:HGroup id="group4" x="10" y="313" width="263" height="92">
</s:HGroup>
</s:BorderContainer>
</s:BorderContainer>
<fx:Script>
<![CDATA[
//Gabe Dougherty
//n222
//Midterm
//3-8-13
public var myPlayerLabel:Label = new Label;
public var myScoreLabel:Label = new Label;
public var myIncScore:Button = new Button;
public var myDecScore:Button = new Button;
public var myPlayerDelete:Button = new Button;
public var myScore:Number = 0;
public var numPlayers:Number = 0;
public function init():void {
var file:File = File.desktopDirectory.resolvePath("newPlayer.xml");
var stream:FileStream = new FileStream()
stream.open(file, FileMode.READ);
var str:String = stream.readUTFBytes(stream.bytesAvailable);
stream.close();
playerData = XML(str);
myPlayerLabel.text = playerData;
//re-enable myDecScore
myDecScore.enabled = true;
}
public function addPlayer():void {
var file:File = File.desktopDirectory.resolvePath("newPlayer.xml");
var stream:FileStream = new FileStream();
stream.open(file, FileMode.WRITE);
var str:String = playerData.toString();
stream.writeUTFBytes(str);
stream.close();
//set all player info
//make playerLabel
var playerLabel:Label = new Label();
//make scoreLabel
var scoreLabel:Label = new Label();
scoreLabel.text = String(myScore);
//make decScore
var decScore:Button = new Button();
decScore.label = "-";
decScore.addEventListener(MouseEvent.CLICK, decrementScore);
//make incScore
var incScore:Button = new Button();
incScore.label = "+"
incScore.addEventListener(MouseEvent.CLICK, incrementScore);
//make playerDelete
var playerDelete:Button = new Button();
playerDelete.label = "Delete";
playerDelete.addEventListener(MouseEvent.CLICK, deletePlayer);
numPlayers++;
if(numPlayers == 1) {
group1.addElement(playerLabel);
group1.addElement(scoreLabel);
group1.addElement(decScore);
group1.addElement(incScore);
group1.addElement(playerDelete);
} else if(numPlayers == 2) {
group2.addElement(playerLabel);
group2.addElement(scoreLabel);
group2.addElement(decScore);
group2.addElement(incScore);
group2.addElement(playerDelete);
} else if(numPlayers == 3) {
group3.addElement(playerLabel);
group3.addElement(scoreLabel);
group3.addElement(decScore);
group3.addElement(incScore);
group3.addElement(playerDelete);;
} else if(numPlayers == 4) {
group4.addElement(playerLabel);
group4.addElement(scoreLabel);
group4.addElement(decScore);
group4.addElement(incScore);
group4.addElement(playerDelete);
}
//add a new player from text input
var newPlayer:XML = <player></player>;
[email protected] = myTextBox.text;
playerData.appendChild(newPlayer);
myPlayerLabel.text = newPlayer;
}
public function deletePlayer():void {
delete playerData.players.player;
//not sure of the right syntax for deleting a node but I think this is right?
}
public function decrementScore(e:MouseEvent):void {
myScore--;
myScoreLabel.text = String(myScore);
if(myScore == 0) {
myDecScore.enabled = false;
myDecScore.alpha = .5;
}
trace(myScore);
}
public function incrementScore(e:MouseEvent):void {
myScore++;
myScoreLabel.text = String(myScore);
trace(myScore);
}
]]>
</fx:Script>
</s:WindowedApplication>
Проблема, которую я поставил в MXML, заключалась в том, что они всегда будут отображаться. Мне нужно, чтобы они были на сцене, когда игрок добавлен, а не там, когда нет. Я не знал другого способа сделать это. –
Я также не мог добавить публичные переменные в группы и оставить их во всех группах. Скажем, я добавил кнопки и т. Д. В группу1, затем я нажал кнопку добавить игрока еще раз, чтобы добавить второго игрока во вторую группу. Кнопки игрока перескакивают из группы 1 в группу2, а не остаются в обоих. Вот почему мне пришлось создавать новые переменные внутри функции, которые работают по какой-то причине. –
И что касается playerLabel, он должен вытащить из XML-документа, в котором уже есть игроки, но я не очень хорошо знаком с моим XML, но есть еще одна проблема. –