Для каждой строки в массиве - PullRequest
0 голосов
/ 24 июня 2011

Так же, как имя говорит, я хочу, чтобы для каждого определенного имени в массиве значение добавлялось к int.

Например: если в массиве 3 строки с одинаковыми именами, к значению будет добавлено 3 раза 50.

Это мой сценарий, который у меня сейчас есть:

var lootList = new Array();
var interaction : Texture;
var interact = false;
var position : Rect;
var ching : AudioClip;
var lootPrice = 0;

function Update()
{
    print(lootList);

    if ("chalice" in lootList){
        lootPrice += 50;
    }
}

function Start()
{
    position = Rect( ( Screen.width - interaction.width ) /2, ( Screen.height - interaction.height ) /2, interaction.width, interaction.height );
}

function OnTriggerStay(col : Collider)
{   
    if(col.gameObject.tag == "loot")
    {
        interact = true;

        if(Input.GetKeyDown("e"))
        {
            if(col.gameObject.name == "chalice")
            {
                Destroy(col.gameObject);
                print("chaliceObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("chalice");
            }

            if(col.gameObject.name == "moneyPouch")
            {
                Destroy(col.gameObject);
                print("moneyPouchObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("moneyPouch");
            }

            if(col.gameObject.name == "ring")
            {
                Destroy(col.gameObject);
                print("ringObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("ring");
            }

            if(col.gameObject.name == "goldCoins")
            {
                Destroy(col.gameObject);
                print("coldCoinsObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("goldCoins");
            }

            if(col.gameObject.name == "plate")
            {
                Destroy(col.gameObject);
                print("plateObtained");
                audio.clip = ching;
                audio.pitch = Random.Range(0.8,1.2);
                audio.Play();
                interact = false;
                lootList.Add("plate");
            }
        }
    }
}

function OnTriggerExit(col : Collider)
{   
    if(col.gameObject.tag == "pouch")
    {
        interact = false;
    }
}

function OnGUI()
{
    if(interact == true)
    {
        GUI.DrawTexture(position, interaction);
        GUI.color.a = 1;
    }
}

Это для игры, которую я делаю, где вы можете украсть предметы для дополнительных очков.

Я пытался использовать for(i = 0; i < variable.Length; i++), но, похоже, это не сработало.

Единственное, о чем я могу думать сейчас, это использовать логические значения, чтобы добавить его один раз. Но это не дружит с памятью.

Помощь приветствуется и спасибо заранее!

1 Ответ

1 голос
/ 24 июня 2011

Вы можете использовать стандартный .forEach(callback) метод:

lootList.forEach(function(value, index, array)
{
    if (value === "chalice") { lootPrice += 50; }
});

Если у вас нет этого метода, вы можете реализовать его следующим образом:

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function (callback) {
        for(var i = 0; i < this.length; i++) { callback(this[i], i, this); }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...