Просмотр полной версии : Элементы массива
Терпеливый
11.02.2013, 20:46
Всем добрый вечер!
Подскажите, кто знает:
-есть массив
var _mas:Array = new Array(cl1, cl2, cl3, cl5, cl6, cl7, cl8);
каждый элемент выбирается случайно и движется:
я поместил случайный элемент с переменную var a = _mas[num];
создал обработчик:
a.onEnterFrame = function (){
a._y += speed2;}
if (distance == (a._yscale/2 + cl._yscale/2)){
delete this.onEnterFrame;
}
}
но он собирает все объекты(а) и движет все вместе, а удаляет только выбранный
- как мне поместить на рабочую область(сцену) копию случайно выбранного элемента, а не всех?
как мне остановить клип при соприкосновении с другим клипом?
a._y += speed; - задаю скорость; speed = 0; - останавливаю при соприкосновении
есть какой-то другой способ остановки?
Исходник или весь код + флэшку покажите. Иначе у вас в приведенном коде просто ошибки и не понятно, почему _yscale используется.
Терпеливый
13.02.2013, 15:27
7 объектов на сцене.по идеи они должны были бы вызываться из массива по одному, но я не знаю как это сделать
в общем виде должно быть так:
-выбирается случайный элемент, делается копия элемента массива(не знаю как реализовать)
-задается скорость элемента и проверяется на столкновение с объектом cl4
-если произошло столкновение(cl4) то объект должен остаться на месте
-потом повторяется все заново, но плюс еще и столкновение с этими же объектами
lexa2000lexa
13.02.2013, 16:03
Если я правильно понял, то нужно вот так :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
Попробуйте вот так:
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
var _mase:Array = new Array(d1, d2, d3, d4);
для определения их соприкосновения
a.removeMovieClip();
delete this.onEnterFrame;
не удалить, а оставить
можно элементом массива записать другой массив?если да то как?
lexa2000lexa
14.02.2013, 11:28
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
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();
1. Пустой мувиклип создается как контейнер для битмап даты т.к она не может отображаться без контейнера...
2. Аттач битмап дата атачит данный битмап к мувиклипу на this.getNextHighestDepth() (самую большую глубину)
3. rectangle.x это x координат квдарата. Тут нету ни 1 слова о вращении почему вдруг это вращение?:)
Терпеливый
14.02.2013, 21:17
поясните это условие
if(myBitmapData.hitTest(destPoint, 255, currPoint)) {
function createRectangle(width:Number, height:Number, color:Number):MovieClip {
var depth:Number = this.getNextHighestDepth();
var mc:MovieClip = this.createEmptyMovieClip("mc_" + depth, depth);
mc.beginFill(color);
mc.lineTo(0, height);
mc.lineTo(width, height);
mc.lineTo(width, 0);
mc.lineTo(0, 0);
return mc;
}
var mc:MovieClip = this.createEmptyMovieClip("mc_" + depth, depth); - создает и размещает объект на 1 уровень выше чем getNextHighestDepth()?
по Ditmap.hitTest() есть литература для AS2, а то я не нашел(
по Ditmap.hitTest() есть литература для AS2, а то я не нашел(
F1
if(myBitmapData.hitTest(destPoint, 255, currPoint)) {
Делает битмап хит тест. http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000794.html
Терпеливый
15.02.2013, 22:26
import flash.display.BitmapData;
var myBitmapData:BitmapData = new BitmapData(150, 150, false, 0x00CCCCCC);
//0x00CCCCCC - обязательно писать?
//150, 150 - размеры квадрата и false - непрозрачность
var mc_1:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
//создаем для mc_1:MovieClip(обьекта) "элементарный" отображаемый элемент с именем mc
//и рисуем его последним наибольшая глубина и добавитьобъект myBitmapData в список
//отображения mc_1(который является экземпляром класса MovieClip)
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth());
//для отображения Bitmap на экране нужно добавить его в список отображения методом
//mc_1.attachBitmap получается что мы отрисовываем переменную myBitmapDatа типа
BitmapDatа через экземпляр обьекта mc_1 мы используем только класс MovieClip не создавая обьект на сцене
если мне нужно проверить на столкновение 2 обьекта, то:
делать так
var mc_2:MovieClip = createRectangle(20, 20, 0xFF0000);
//рисуем куб 20, 20 - размеры и 0xFF0000 - цвет
или как mc_1?
var destPoint:Point = new Point(myBitmapData.rectangle.x, myBitmapData.rectangle.y);
//координаты х и у по верхней левой точке обьекта?
mc_1.onEnterFrame = function() {
//обновление обьекта на сцене
currPoint.x = mc_2._x;
currPoint.y = mc_2._y;
//записываем в переменную координаты клипа
if(myBitmapData.hitTest(destPoint, 255, currPoint)) {
//сравниваем координаты destPoint, currPoint
function createRectangle(width:Number, height:Number, color:Number):MovieClip {
var depth:Number = this.getNextHighestDepth();
var mc:MovieClip = this.createEmptyMovieClip("mc_" + depth, depth);
//получается что переменную mc мы положим на уровень + depth(depth=1)
а 255 - к чему здесь цвет???
если мне нужно проверить на столкновение 2 обьекта, то:
делать так
var mc_2:MovieClip = createRectangle(20, 20, 0xFF0000);
или как mc_1?
подскажите правильно написал? дайте пожалуйста ответы на вопросы
Добавлено через 15 часов 29 минут
game = {};
game.mc._x = mc._x;
game.mc._y = mc._y;
speed = 2;
_root.onEnterFrame = function(){
mc._x += speed;
}
я сохраняю координаты клипа в обьекте game = {}.как мне вывести эти координаты с обьекта game = {}?
Терпеливый
19.02.2013, 15:32
Подскажите, пожалуйста, как добавить объект типа MovieClip в getBouns
var coord1:Object = this.getBounds(_root);
var coord2:Object = clip.getBounds(_root);
в эти строки как поместить MovieClip. clip не подходит, пишет для Object(
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.