История поля со списком в as3 - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь создать поле со списком (из списка компонентов во Flash CS4).Я получил его для работы с

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 в функции gunboxselecter)

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



}
}

Все работает, кроме ножа.Это только следы меча ...

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

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

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

0 голосов
/ 14 февраля 2012

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

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

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

Похоже, проблема в том, что это метод selectBow. Похоже, вы трассировали weaponsHistory еще до того, как изменили его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...