Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вопрос по массивам (http://www.flasher.ru/forum/showthread.php?t=173011)

KirillWd 21.12.2011 22:31

Вопрос по массивам
 
Приветствую всех!
Вопрос такой: Как можно проверить условие, которое выполняется одновременно со всеми объектами в массиве?
Не поняли, вот пример:
у нас есть три объекта obj1, obj2, obj3, все они добавлены в массив. У каждого из объектов есть свойство prop, тип boolean (хотя это не важно).
так вот, мне надо проверить условие выполнения всех этих свойств, ну, например, в true.

т.е.

Код AS1/AS2:

if(obj1.prop && obj2.prop && obj3.prop) {что-то там...}

так вот, как это можно заменить, используя массив? просто объектов может быть немыслимое кол-во, а надо, чтобы выполнялись одновременно все условия.

mooncar 21.12.2011 22:51

Код AS1/AS2:

var obj1:Object = { prop:true };
arr.push(obj1);
var obj2:Object = { prop:true };
arr.push(obj2);
var obj3:Object = { prop:true };
arr.push(obj3);
 
testProp();
 
function testProp()
{
        var totalProp:Boolean ;
 
        for (i in arr)  //по всем элементам массива
        {
 
                var obj:Object = arr[i];
 
                if (totalProp == undefined)
                {
                        totalProp = obj.prop;
                }
                else
                {
                        totalProp = totalProp && obj.prop;
                }
        }       
 
        if (totalProp)
        {
                trace('что-то там');
        }
}


KirillWd 22.12.2011 20:06

да, это работает. но если менять свойство динамически, значение totalProp не меняется.
как это исправить?

mooncar 22.12.2011 20:56

Оно поменяется после вызова testProp(). Как только поменяли динамически какое-то свойство, вызывайте эту функцию.
Либо вызывайте непосредственно перед использованием totalProp.

А ваш вопрос с неопределенным количеством элементов массива решается с помощью цикла for (i in array).

KirillWd 22.12.2011 21:26

Вложений: 1
Я совсем криворукий.
Вот щито такое! Как переделать?

mooncar 22.12.2011 21:44

Исходник-исходником, а вот что вы хотите и что у вас не получается?

PS. Там у вас 3 мувика с одинаковым именем mc1 на сцене - поправьте для начала, так не должно быть.

KirillWd 23.12.2011 01:26

вот смотрите, я хочу, чтобы переменная total была в значении false до тех пор, пока хотя бы одно св-во какого-то объекта в массиве не стала true. Соответствующее св-во принимает знач. true, когда мышь касается окр-ти.

Tails 23.12.2011 16:45

Код AS1/AS2:

var myArray:Array = Array(false,true,false);
for(i=0; i<myArray.length; i++){
        if(myArray[i] > false){
                result = true;
                break;
        }
};
trace(result);


silin 23.12.2011 17:12

Код AS1/AS2:

var blocks:Array = [];
var total:Boolean;
 
function circles(obj){
        blocks.push(obj);
        obj.collision = function(x, y)        {
 
                this.distX = (x - this._x) * (x - this._x);
                this.distY = (y - this._y) * (y - this._y);
                this.dist = this.distX + this.distY;
                this.hit = Math.sqrt(this.dist) <= this._width / 2;
 
        }
}
 
onEnterFrame = function(){
 
        total = false;
        for (l in blocks)
        {
                circle = blocks[l];
                circle.collision(_xmouse, _ymouse);
                total = total || circle.hit;
        }
 
        txt1.text = blocks[0].hit;
        txt2.text = blocks[1].hit;
        txt3.text = blocks[2].hit;
        txt.text = total;
 
}


KirillWd 23.12.2011 19:52

спасибо большое всем.
код silin`а работает :)

Добавлено через 4 минуты
и Tails`a


Часовой пояс GMT +4, время: 16:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.