2012-02-13 1 views
0

J'essaie de créer une zone de liste déroulante (à partir de la liste des composants dans flash cs4). Je l'ai obtenu à travailler avecHistorique de la zone de liste déroulante dans as3

import fl.accessibility.ComboBoxAccImpl; 
import fl.data.DataProvider; 
import fl.events.ComponentEvent; 

ComboBoxAccImpl.enableAccessibility(); 
var weapons:Array = [ 
    {label:"Sword", data:"SwordSelected"}, 
    {label:"Bow", data:"BowSelected"}, 
    {label:"Knife", data:"KnifeSelected"}]; 
testtxt.text = String("sword"); 

weaponselector.dataProvider = new DataProvider(weapons); 

weaponselector.addEventListener(ComponentEvent.ENTER, weaponsadd); 
weaponselector.addEventListener(Event.CHANGE, weaponboxselecter); 


function weaponboxselecter(event:Event):void 
{ 
    if (ComboBox(event.target).selectedItem.data != "SwordSelected") 
    { 
     selectSword(); 
     testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    } 
    else if (ComboBox(event.target).selectedItem.data != "BowSelected") 
    { 
     selectBow(); 
     testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    } 
    else if (ComboBox(event.target).selectedItem.data != "KnifeSelected") 
    { 
     selectKnife(); 
     testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    } 
} 

mais je tryed pour créer une histoire si ce qui est cliqué (selectKnife/selectBow/selectSword dans la fonction weaponboxselecter)

var weaponsHistory:Array = ["Sword"]; 
trace(weaponsHistory); 
function selectBow() 
{ 
    var Bowadds:Bowadd = new Bowadd(); 
    Bowadds.x = 300 
    Bowadds.y = 300 
    stage.addChild(Bowadds); 
    trace(weaponsHistory); 
    weaponsHistory.splice(1, "Bow"); 
} 

function selectKnife() 
{ 
    var Knifeadds:Bowadd = new Bowadd(); 
    Knifeadds.x = 300 
    Knifeadds.y = 300 
    stage.addChild(Knifeadds); 
    weaponsHistory.splice(1, "Knife"); 
    trace(weaponsHistory); 
} 

function selectSword() 
{ 
    var Swordadds:Bowadd = new Bowadd(); 
    Swordadds.x = 300 
    Swordadds.y = 300 
    stage.addChild(Swordadds); 
    weaponsHistory.splice(1, "Sword"); 
    trace(weaponsHistory); 
} 

mais toujours des traces épée

des suggestions

grâce

[nouveau code]

var weaponsHistory:Array = ["Sword"]; 
function weaponboxselecter(event:Event):void{ 
if(ComboBox(event.target).selectedItem.data != "SwordSelected"){ 
    selectSword(); 
    testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    weaponsHistory.splice(0,0,"Sword"); 

}else if(ComboBox(event.target).selectedItem.data != "BowSelected"){ 
    selectBow(); 
    testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    weaponsHistory.splice(0,0,"Bow"); 


}else if(ComboBox(event.target).selectedItem.data != "KnifeSelected"){ 
    selectKnife(); 
    testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    weaponsHistory.splice(0,0,"Knife"); 



} 
[new code] 
trace(weaponsHistory);// just less code 
[end new code] 
    } 

cela ne fonctionne toujours pas. Je vais l'expliquer un peu mieux:

L'épée est d'abord sélectionnée. Puis, lorsque je clique sur l'archet/couteau, l'épée est remplacée par un arc/couteau. De cette façon, je peux ajouter et supprimer des objets en fonction de ce qui a été cliqué en dernier (si vous avez une autre façon de faire cela, je suis prêt pour d'autres options.)

Ce qui se passe est que l'épée est tracée que si je clique sur couteau, l'épée est tracée et si je clique sur l'arc, l'épée est tracée, mais si le clic sur l'épée ou le couteau à nouveau que l'arc est tracée.

grâce

[nouveau Code]

function selectBow(){ 
    var Bowadds:Bowadd = new Bowadd(); 
    Bowadds.x = 300 
    Bowadds.y = 300 
    stage.addChild(Bowadds); 
    trace(weaponsHistory); 





} 


function selectKnife(){ 
    var Knifeadds:Bowadd = new Bowadd(); 
    Knifeadds.x = 300 
    Knifeadds.y = 300 
    stage.addChild(Knifeadds); 
    trace(weaponsHistory); 




} 

function selectSword(){ 
    var Swordadds:Bowadd = new Bowadd(); 
    Swordadds.x = 300 
    Swordadds.y = 300 
    stage.addChild(Swordadds); 
    trace(weaponsHistory); 

} 


function weaponsadd(event:ComponentEvent):void { 
    var newRow:int = 0; 
    if (event.target.text == "Add") { 
     newRow = event.target.length + 1; 
      event.target.addItemAt({label:"screen" + newRow, data:"screenData" + newRow}, 
      event.target.length); 
    } 
} 

function weaponboxselecter(event:Event):void{ 
if(ComboBox(event.target).selectedItem.data != "SwordSelected"){ 
    selectSword(); 
    testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    weaponsHistory.push("Sword"); 

}else if(ComboBox(event.target).selectedItem.data != "BowSelected"){ 
    selectBow(); 
    testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    weaponsHistory.push("Bow"); 


}else if(ComboBox(event.target).selectedItem.data != "KnifeSelected"){ 
    selectKnife(); 
    testtxt.text = String(ComboBox(event.target).selectedItem.label); 
    weaponsHistory.push("Knife"); 



} 
} 

Il fonctionne tous, sauf pour le couteau. Il ne fait que tracer l'épée ...

Répondre

0

Vous utilisez incorrectement splice(...). Je ne suis pas tout à fait certain de ce qui se passe, mais l'utilisation correcte de splice comprend un start index, un supprimer nombre et et les ajouts facultatifs. Essayez ...splice(1,0,"...");. Alternativement, si vous voulez que l'addition arrive en premier dans la matrice, ...splice(0,0,"..."); peut être un meilleur choix.

0

Vous devriez regarder étape par étape ce que fait votre code.

Dans votre deuxième exemple de code, sur la première ligne, vous définissez weaponsHistory à ["sword"]. Donc ce sera l'épée quand tu la traceras.

ensuite dans vos selectKnife et selectSword méthodes que vous ajoutez ou "Knife""Sword" à l'index 1 de votre tableau weaponsHistory, puis le tracer.

On dirait que votre problème est la méthode selectBow. On dirait que vous tracez weaponsHistory avant même de le modifier.

Juste une note; Si vous essayez d'ajouter un élément à la fin d'un tableau, vous devez probablement utiliser push plutôt que splice (utilisez weaponsHistory.push("Bow"); plutôt que weaponsHistory.splice(1, "Bow");)

+0

Pourquoi le downvote? –

+1

n'était pas moi en fait cela est très utile – thor625

+0

il a égalisé – thor625

Questions connexes