PDA

Просмотр полной версии : Запаздывание объекта


theGC
18.08.2007, 18:24
Клип1 должен повторять координаты Клипа2 только с запаздыванием на 1-2 секунды.
Хелп? :bye:

Kikasso
18.08.2007, 18:56
ну примерно так:
var lim = 62; // 2 сек х 31 кадр в секунду, или сколько у вас там
var stack = new Array();
function recordPoz(){
stack.push([clip2._x, clip2._y]);
}
function reflectPoz(){
if(stack.length < lim )return; // мало записей - 2 сек не прошло, выход
var poz = stack.shift();
trace(poz);
clip1._x = poz[0];
clip1._y = poz[1];
}
onEnterFrame = function(){
recordPoz();
reflectPoz();
}
clip2.startDrag(true);

theGC
18.08.2007, 19:47
Thanks!

Nirth
18.08.2007, 21:36
Афигеть

Wolsh
18.08.2007, 22:00
Браво!

†‡Paladin‡†
18.08.2007, 23:18
Соглашусь с вышесказаным =)

Molecula
18.08.2007, 23:24
Отцовский Отжиг.

udaaff
18.08.2007, 23:36
Потрясающе!

BARTLEBY
19.08.2007, 00:18
супер! +

Nirth
19.08.2007, 01:28
Так, а теперь давайте каждый скажет почему он тут отпостился.

Лично я отпостился потому то меня очень удивил вопрос автора.

Wolsh
19.08.2007, 01:36
А я похвалил красивое решение. Которое имеет также корни универсальности, в смысле может быть еще для чего-то использовано. А может быть, оно уже было для чего-то использовано :) А что с вопросом, Nirth? Не представляешь, где это применить? Разведчик показывает дорогу юнитам. Группа девушек переправляется через речку по бревну. Ты управляешь убегающим зайцем, а собака его догоняет :)

miramax
19.08.2007, 01:36
Думаю всех удивило существование методов push и shift

udaaff
19.08.2007, 01:44
Это просто цепная реакция пошла =)

artcraft
19.08.2007, 01:51
Думаю всех удивило существование методов push и shiftа что с ними не так?

Король
19.08.2007, 02:41
"Думаю всех удивило существование методов push и shift"
хахахаха
а что такого в этом решении? оно как раз самое банальное - первое, что приходит в голову.

отцовским решением было бы хранить в массиве всего одну запись в единицу времени - ведь это реально то, что необходимо и достаточно

о как я только что лажанулся

CCCPirate
19.08.2007, 02:47
Very nice!

†‡Paladin‡†
19.08.2007, 03:05
Меня удивил адский способ Kikasso со счетчиком кадров. Всем индусам на зависть! =))

artcraft
19.08.2007, 03:17
Меня удивил адский способ Kikasso со счетчиком кадров. Всем индусам на зависть! =))
ну давай, предложи "более элегантное решение" :~)

miramax
19.08.2007, 03:57
Вообще можно проще:
onEnterFrame = function(){
setTimeout(function(obj){
clip2._x = obj.x;
clip2._y = obj.y;
}, 1000, {x:clip1._x, y:clip1._y});
}
clip1.startDrag(true);
или вот так, без динамики:
onEnterFrame = function(){
setTimeout(setXY, 1000, {x:clip1._x, y:clip1._y});
}
setXY function(obj){
clip2._x = obj.x;
clip2._y = obj.y;
}
clip1.startDrag(true);
Стеки здесь - лишние.

udaaff
19.08.2007, 04:05
Раз на то пошло =)) Стек действительно лишний, а вот очередь -- как раз подойдет))
var queue:Array = new Array(33);
//
onEnterFrame = function () {
queue.push({x:mc1._x, y:mc1._y});
var shifted:Object = queue.shift();
mc2._x = shifted.x;
mc2._y = shifted.y;
};
//
mc1.startDrag(true);:yahoo:

miramax
19.08.2007, 04:07
Раз на то пошло =)) Стек действительно лишний, а вот очередь -- как раз подойдет))
var queue:Array = new Array(33);
//
onEnterFrame = function () {
queue.push({x:mc1._x, y:mc1._y});
var shifted:Object = queue.shift();
mc2._x = shifted.x;
mc2._y = shifted.y;
};
//
mc1.startDrag(true);:yahoo:
Строк одинаково... как у меня. А букав больше :p
Хавать пустые объекты методом shift будет не логично. И такое в ас3 не прокатит.

udaaff
19.08.2007, 04:20
Елси предварительно массив объектами заполнить, то тогда ты победишь))

Kikasso
19.08.2007, 04:40
Не понял, если честно, что все наехали.
В чем принципиальное преимущество массива объектов перед массивом массивов? А вот от стопки таймайтов принцип "стека"(хорошо, "очереди") отличается тем что можно "притормозить" движение первого клипа, продолжая записывать движение второго (или мышки или еще чего), а с таймаутами это сделать затруднительно.
А что у вас miramax букв меньше - так это немудрено. Вы название функции не написали.
А по поводу пустых объектов тоже неправильно. Так хотя бы:
var shifted:Object = queue.shift();
if(shifted){
mc2._x = shifted.x;
mc2._y = shifted.y;
}

miramax
19.08.2007, 05:05
Я дал в двух вариантах, с динамикой и без (без "названия функции").
Мы просто нашли самое простое решение.

Тьфу блин.... да что в самом деле, любой это без напряга напишет...

Wolsh
19.08.2007, 10:55
Дивлюсь я на вас, программеров - чёто ругаются, хвосты распускают...
Да всё это просто ПРИКОЛЬНАЯ штука, вот все и выразили восхищение. Все, кто не воспринял это восхищение как самцовый вызов. Вроде и не подростки уже, можно и без линейки обойтись. Буквы считают... Тьфу. Есть лучшее решение - выложи, а "пальцы"-то здесь при чем?
--------------------
[на правах флейма]

iNils
19.08.2007, 13:07
Это просто цепная реакция пошла =)
Nirth, что я тебе говорил?:)

etc
19.08.2007, 17:37
Наверное, с минуту втыкал в код Kikasso, пытаясь найти логику. Нашел. Видимо, из-за этой задержки в мозгу и появилось столько постов позже.