Форум 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=194308)

Терпеливый 11.02.2013 20:46

Элементы массива
 
Всем добрый вечер!
Подскажите, кто знает:
-есть массив
Код AS1/AS2:

var _mas:Array = new Array(cl1, cl2, cl3, cl5, cl6, cl7, cl8);

каждый элемент выбирается случайно и движется:
я поместил случайный элемент с переменную
Код AS1/AS2:

var a = _mas[num];

создал обработчик:
Код AS1/AS2:

 a.onEnterFrame = function (){
                        a._y += speed2;}
                        if (distance == (a._yscale/2 + cl._yscale/2)){
                                delete this.onEnterFrame;
                        }
                        }

но он собирает все объекты(а) и движет все вместе, а удаляет только выбранный

- как мне поместить на рабочую область(сцену) копию случайно выбранного элемента, а не всех?
как мне остановить клип при соприкосновении с другим клипом?
a._y += speed; - задаю скорость; speed = 0; - останавливаю при соприкосновении
есть какой-то другой способ остановки?

Hauts 12.02.2013 12:05

Исходник или весь код + флэшку покажите. Иначе у вас в приведенном коде просто ошибки и не понятно, почему _yscale используется.

Терпеливый 13.02.2013 15:27

Вложений: 1
7 объектов на сцене.по идеи они должны были бы вызываться из массива по одному, но я не знаю как это сделать
в общем виде должно быть так:
-выбирается случайный элемент, делается копия элемента массива(не знаю как реализовать)
-задается скорость элемента и проверяется на столкновение с объектом cl4
-если произошло столкновение(cl4) то объект должен остаться на месте
-потом повторяется все заново, но плюс еще и столкновение с этими же объектами

lexa2000lexa 13.02.2013 16:03

Если я правильно понял, то нужно вот так :
Код AS1/AS2:

function st()
{
        num = Math.floor(Math.random() * _mas.length);
        a = _mas[num];
        a._y = 100;
        a._x = 300;
        if (distance > (a._yscale / 2 + cl4._yscale))
        {
 
                a.onEnterFrame = function()
                {
                        a._y += speed2;
                };
                if (distance == (a._yscale / 2 + cl4._yscale / 2))
                {
                        delete this.onEnterFrame;
                }
        }
}


Терпеливый 13.02.2013 18:18

Спасибо огромное, lexa2000lexa, все работает, но мне надо выбрать случайный элемент массива и поместить его на сцену(чтобы он падал), при этом 6 остальных должны быть скрыты.Это возможно?Или есть какая-то альтернатива?

lexa2000lexa 13.02.2013 19:03

Попробуйте вот так:
Код AS1/AS2:

import flash.geom.Point;
var _mas:Array = new Array("cl1", "cl2", "cl3", "cl5", "cl6", "cl7", "cl8");
var speed = 2;
var speed2 = 4;
var speed3 = 2;
 
 
function st()
{
        var num = Math.floor(Math.random() * _mas.length);
        var a:MovieClip = this.attachMovie(_mas[num], "new" + _mas[num], this.getNextHighestDepth(), {_x:300, _y:100});
        var b:Point = new Point(a._x, a._y);
        var cb4:Point = new Point(cl4._x, cl4._y);
        var distance:Number = Point.distance(b, cb4);
        trace(distance + "  " + (a._yscale / 2 + cl4._yscale));
        if (distance > (a._yscale / 2 + cl4._yscale))
        {
                speed = speed2;
        }
        a.onEnterFrame = function()
        {
                a._y += speed;
 
                if (a.hitTest(cl4))
                {
                        a.removeMovieClip();
                        delete this.onEnterFrame;
                        st();
                }
        };
}
st()

при этом удалите клипы которые у вас движутся.

Терпеливый 13.02.2013 22:52

Спасибо большое.Помогло.

как мне можно сравнить переменную с массивом объектов(if (a.hitTest(cl4))), только вместо cl4 массив _mase
Код AS1/AS2:

var _mase:Array = new Array(d1, d2, d3, d4);

для определения их соприкосновения

Код AS1/AS2:

a.removeMovieClip();
delete this.onEnterFrame;

не удалить, а оставить

можно элементом массива записать другой массив?если да то как?

lexa2000lexa 14.02.2013 11:28

Код AS1/AS2:

a.onEnterFrame = function()
{
        a._y += speed;
        for (var i in _mase)
        {
                if (a.hitTest(_mase[i]))
                {
                        break;
                        delete this.onEnterFrame;
                        st();
                }
 
        }
};


Терпеливый 14.02.2013 20:05

Помогло спасибо

у меня вопрос по BitmapData.hitTest

Код AS1/AS2:

var mc_1:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth());

зачем мы создаем пустой клип(createEmptyMovieClip)?
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth()); - можно объяснить это?
мы добавляем объект(mc_1) в класс BitmapData и ложем на уровень getNextHighestDepth().правильно?

var destPoint:Point = new Point(myBitmapData.rectangle.x, myBitmapData.rectangle.y);
rectangle.x - это же поворот по оси х. зачем вращать?

это точка для мыши?
var currPoint:Point = new Point();

Asfel 14.02.2013 20:29

1. Пустой мувиклип создается как контейнер для битмап даты т.к она не может отображаться без контейнера...

2. Аттач битмап дата атачит данный битмап к мувиклипу на this.getNextHighestDepth() (самую большую глубину)

3. rectangle.x это x координат квдарата. Тут нету ни 1 слова о вращении почему вдруг это вращение?:)


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

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