2013-03-12 2 views
1

Я делаю программу, которая добавляет игроков на сцену, и я могу добавлять или вычитать очки. Я думаю, что я близок к завершению, за исключением нескольких вещей, я не могу видеть имена игроков на экране, и у меня проблемы с отображением баллов. Оценки увеличиваются и уменьшаются при нажатии кнопок, но ярлык на дисплее не отображает их. Вот моя вся программа прямо сейчас. Это немного грязно, поэтому я заранее извиняюсь.Управление данными 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> 

ответ

0

Это действительно немного сложно.

Я вижу следующие возможные ошибки:

  • в myPlayerLabel, который, кажется, никогда не будут добавлены в DisplayList. (Нет addElement(myPlayerLabel))
  • a playerLabel который добавлен в список отображения, но его text не устанавливается. (Нет playerLabel.text = "a string")
  • вы назначаете целый XML-объект myPlayerLabel.text, а не его атрибут name.

Помимо этих ошибок, я не вижу веских причин, почему все это должно быть написано в ActionScript. Ваш код был бы намного более прозрачным, если бы эти кнопки и ярлыки были просто созданы в MXML.

+0

Проблема, которую я поставил в MXML, заключалась в том, что они всегда будут отображаться. Мне нужно, чтобы они были на сцене, когда игрок добавлен, а не там, когда нет. Я не знал другого способа сделать это. –

+0

Я также не мог добавить публичные переменные в группы и оставить их во всех группах. Скажем, я добавил кнопки и т. Д. В группу1, затем я нажал кнопку добавить игрока еще раз, чтобы добавить второго игрока во вторую группу. Кнопки игрока перескакивают из группы 1 в группу2, а не остаются в обоих. Вот почему мне пришлось создавать новые переменные внутри функции, которые работают по какой-то причине. –

+0

И что касается playerLabel, он должен вытащить из XML-документа, в котором уже есть игроки, но я не очень хорошо знаком с моим XML, но есть еще одна проблема. –

Смежные вопросы