Просмотр полной версии : Вопрос по массивам
KirillWd
21.12.2011, 22:31
Приветствую всех!
Вопрос такой: Как можно проверить условие, которое выполняется одновременно со всеми объектами в массиве?
Не поняли, вот пример:
у нас есть три объекта obj1, obj2, obj3, все они добавлены в массив. У каждого из объектов есть свойство prop, тип boolean (хотя это не важно).
так вот, мне надо проверить условие выполнения всех этих свойств, ну, например, в true.
т.е.
if(obj1.prop && obj2.prop && obj3.prop) {что-то там...}
так вот, как это можно заменить, используя массив? просто объектов может быть немыслимое кол-во, а надо, чтобы выполнялись одновременно все условия.
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 не меняется.
как это исправить?
Оно поменяется после вызова testProp(). Как только поменяли динамически какое-то свойство, вызывайте эту функцию.
Либо вызывайте непосредственно перед использованием totalProp.
А ваш вопрос с неопределенным количеством элементов массива решается с помощью цикла for (i in array).
KirillWd
22.12.2011, 21:26
Я совсем криворукий.
Вот щито такое! Как переделать?
Исходник-исходником, а вот что вы хотите и что у вас не получается?
PS. Там у вас 3 мувика с одинаковым именем mc1 на сцене - поправьте для начала, так не должно быть.
KirillWd
23.12.2011, 01:26
вот смотрите, я хочу, чтобы переменная total была в значении false до тех пор, пока хотя бы одно св-во какого-то объекта в массиве не стала true. Соответствующее св-во принимает знач. true, когда мышь касается окр-ти.
var myArray:Array = Array(false,true,false);
for(i=0; i<myArray.length; i++){
if(myArray[i] > false){
result = true;
break;
}
};
trace(result);
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
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.