2012-02-13 3 views
0

Я пытаюсь создать Combo Box (из списка компонентов в flash cs4). Я получил его на работу сИстория Combo Box в 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); 
    } 
} 

, но затем я судимым создать историю, если то, что в настоящее время щелкнул (selectKnife/selectBow/selectSword в функции 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); 
} 

, но она всегда прослеживает меч

любые предложения

благодарит

[Новый код]

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] 
    } 

это все еще не работает. Я объясню это немного лучше:

Меч сначала выбран. Затем, когда я нажимаю на Лук/Нож, Меч заменяется Луком/Ножом. Таким образом, я могу добавлять и удалять объекты в зависимости от того, что было нажато в последний раз (если у вас есть другой способ сделать это, я воспользуюсь другими опциями.)

Что происходит, так это то, что меч прослеживается, чем если бы я нажимал нож, меч прослеживается, и если я нажимаю на лук, прослеживается Меч, но если прослеживается щелчок мечом или ножом снова, чем лук.

благодаря

[новый код]

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"); 



} 
} 

Это все работает за исключением ножа. Он прослеживает только меч ...

ответ

0

Вы используете splice(...) неправильно. Я не совсем уверен в том, что происходит, но правильное использование сплайсинга включает начальный индекс, a delete count и, кроме того, дополнительные дополнения. Попробуйте ...splice(1,0,"...");.

В качестве альтернативы, если вы хотите, чтобы дополнение было первым в массиве, ...splice(0,0,"..."); может быть лучшим выбором.

0

Вы должны поэтапно просмотреть, что делает ваш код.

В вашем втором примере кода в первой строке вы устанавливаете weaponsHistory в ["sword"]. Так что это будет меч, когда вы его проследите.

Тогда в ваших selectKnife и selectSword методы добавления "Knife" или "Sword" индексировать 1 вашего weaponsHistory массива, а затем проследить его.

Похоже, вы проблема, это метод selectBow. Похоже, вы трассируете weaponsHistory, прежде чем вы его модифицируете.

Просто примечание; Если вы пытаетесь добавить элемент в конец массива вы, вероятно, следует использовать толчок, а не стык (используйте weaponsHistory.push("Bow"); вместо weaponsHistory.splice(1, "Bow");)

+0

Почему downvote? –

+1

не был на самом деле, это очень полезно – thor625

+0

там выровнен – thor625