PDA

Просмотр полной версии : Нужен код движения объекта


johnparker
09.10.2007, 16:33
Всем привет!
Подскажите, пож-та код. Есть объект, есть 2 кнопки.
Какой код нужен для объекта, кнопок и 1-го кадра (если надо), чтобы при наведении на одну кнопку объект двигался в одну сторону, при наведении на другую - двигался в другую. Также хорошо бы, если бы объект имел границы движения, т.е. не далее определенной координаты..

Отдельные коды я представить могу (самостоятельное движение объекта), но увязать это с кнопкой нет знаний. Помогите, пож-та, а?:)

Мыкыта
09.10.2007, 17:00
смотри в хелпе onRollOver, onRelease, клас Tween

johnparker
09.10.2007, 17:07
смотри в хелпе onRollOver, onRelease, клас Tween
Нипанятна.. :(

Мыкыта
09.10.2007, 17:20
что конкретно непонятно? где хелп зарыт? клавиша F1, там в строке поиск вбиваем по очереди onRollOver, onRelease, Tween class

johnparker
09.10.2007, 18:18
Да не.. где хелп искать понятно.. но как связать кнопки и движение объекта в хелпе не сказано.. :(

Мыкыта
09.10.2007, 18:25
потому что надо читать сначала!!!
import mx.transitions.Tween;
import mx.transitions.easing.*;
button.onRelease = function() {
new Tween(this, "_x", Elastic.easeOut, this._x, 150, 1, true)
}

D12
10.10.2007, 00:16
Абалдеть для такой задачи класс Твин


var Min_Max:Array = [100, 450];
var Go:Array = [-3, 3];
for (var i:Number = 0; i<=2; i++) {
this["button"+i].o = i;
this["button"+i].onPress = function() {
g = this.o;
mc.onEnterFrame = function() {
this._x += Go[g-1];
if (this._x<=Min_Max[g-1] && g == 1 || this._x>=Min_Max[g-1] && g == 2) {
this._x = Min_Max[g-1];
}
};
};
this["button"+i].onRelease = function() {
delete mc.onEnterFrame;
};
}

Мыкыта
10.10.2007, 01:02
а нафига огород городить? клас твин для анимации и предназначен....

D12
10.10.2007, 01:22
К сожалению этот класс не каждоя 8 флеша потдерживает, у меня 2, одна в портобал версии другая так, и не в одной этого класса нет, видно версии такие , так что этот класс не панацея

Кстати класс больше весит =)

Wolsh
10.10.2007, 02:02
Мыкыта (а нафига огород городить? клас твин для анимации и предназначен....)
Для анимации во флэше много что предназначено, а флэшерам еще и руки дал Господь, прямо в момент их творения. И стали они флэш-аниматорами. Потом Господь подумал и стал головы присобачивать. Но флэшеров к тому моменту уже много народилось, и пока он головы присобачивал, многие так и померли с одними руками. И головы лишние остались. Пришлось их к уже безруким флэшерам прикручивать. Так появились флэш-программисты. ©Wolsh'2007
К счастью, многие еще живы и с руками и с головами.

D12 не говори, та же история что и с компонентами - свой скроллер сделать две минуты работы и кода несколько байт. Нет, мучаются, перерисовывают шкурки, маются с подключением всей этой красоты... Чтобы квадратик сдвинуть, универсальный класс, описывающий любое движение, подключают. Потом смотрят - а флэшка-то на жесткий диск не влазит!
Короче нет у меня в восьмерке никакого Твина. И знать про него ничего не знаю. Откуда он вообще взялся? Боги Флэша, расскажите историю сего предмета?

Kikasso
10.10.2007, 02:13
Вот только не надо этого плз. Хороший качественный универсальный скролл слелать не 2 минуты, а несколько больше. Это не аргумент пользовать компонент - тот собака за собой весь вагон кода тащит, и с ним одна морока.
А Твин небольшой, и это.. "эргономично-пользовательский". Если у вас есть компоненты, то есть и класс Твин.
Сравните читабельность кода в постах 6 и 7. А теперь представьте, что вам надо найти там ошибку.

Wolsh
10.10.2007, 02:32
Вот скажи, зачем тебе (мне) УНИВЕРСАЛЬНЫЙ скролл в твоем (моём) проекте?
А с читабельностью - не могу ничего сказать, для меня Твин - китайская азбука, потому что НЕТ у меня в восьмом профешнл никакого Твина. Но и так понятно, что код там (#6) не весь и ситуацию не описывает, а только намекает куда копать.
Что класс весит не как компонент, это понятно. Да, тут D12 загнул наверно.
________________

Гы, нашел!

Kikasso
10.10.2007, 03:55
Скролл нужен универсальный, чтоб его 100 раз не переделывать. Мне надо от него:
1) чтоб менял размер, как я скажу
2) показывал/прятал полоски при смене объекта и прокручивал к началу (или к середине, или к низу)
3) при клике по самой полоске прокрутил к месту клика, желательно плавно
4) умел прокручивать как в процентном отношении (слайдером), так и на определенное растояние (кнопкой)
5) адекватно реагировал на колесико
6) как только достигнут предел прокрутки - лочил соответствующюю кнопку и обратно
7) имел возможность автоматической прокрутки
Кстати сказать, компонентный скролл не все это умеет.

etc
10.10.2007, 10:03
А с читабельностью - не могу ничего сказать, для меня Твин - китайская азбука, потому что НЕТ у меня в восьмом профешнл никакого Твина.
Неправильный у тебя флеш, значит.

Wolsh
10.10.2007, 10:39
>>Неправильный у тебя флеш, значит.

Говорю ж, нашел таки Твин. Ну и закопали. А просто раньше сколько код ни вставлял, который здесь приводили товарищи, он не подсвечивался и не работал (ну понятно потому что я не знал как его подключать). Щас наковырял в хелпе где это лежит, изучу.

2Kikasso и что, положа руку на сердце, действительно никогда не приходится переделывать? Ну так значит это ТЫ САМ себе написал такой как надо, признай что компонент - фигня полная, колесика не знает, по 16 клипов на каждый элемент, когда весь скроллер требует только пять... Ну да ладно, я знаю что думаешь ты правильно, просто так пошло что типа мы спорим :)

iNils
10.10.2007, 10:43
Так как Tween не встроен в плеер, а является кодом, то он и лежит в соответсвующем разделе хелпа.

Kikasso
10.10.2007, 11:06
>признай что компонент - фигня полная
Я не могу признать, я его не пользовал)) Я боюсь этих стандартных компонентов, и мне своих глюков хватает.

johnparker
10.10.2007, 12:32
Абалдеть для такой задачи класс Твин


var Min_Max:Array = [100, 450];
var Go:Array = [-3, 3];
for (var i:Number = 0; i<=2; i++) {
this["button"+i].o = i;
this["button"+i].onPress = function() {
g = this.o;
mc.onEnterFrame = function() {
this._x += Go[g-1];
if (this._x<=Min_Max[g-1] && g == 1 || this._x>=Min_Max[g-1] && g == 2) {
this._x = Min_Max[g-1];
}
};
};
this["button"+i].onRelease = function() {
delete mc.onEnterFrame;
};
}

Дорогой уважаемый D12, спасибо!
А такую же штуку, но чтоб по вертикали двигалась можно сделать? Какой код? х на у поменять?

D12
10.10.2007, 21:16
Верно =) икс на игрик просто поменять =)

P.S. Вы пробуйте потихоньку а если что небудет получатся спрашивайте :)
Приятного вечера =)

johnparker
11.10.2007, 18:16
Спасибо, D12! Сразу после своего сообщения поменял х на у и заработало, а потом Ваш отет увидел :-)
Покопался, все изменил, бегает, СУПЕР, но проблема возникла с границами объекта, в которые он "упирается". Я на этом коде попытался сделать скролл, сделал текст вместо Вашего mc, вставил маску, но тект прокручивается до определенного предела и все тут. Предел, я так понял, менять в var Min_Max:Array = [___, __]? Но даже при изменениях есть какой-то порог.. Как и его поменять?

Может все зависит от расположения объекта и его координат? В одном случае нормально с границами, в другом - нет?
Прям голову сломал :)

D12
12.10.2007, 20:19
var Min_Max:Array = [100, 450];// первое значение это левая координата видимой области экрана минимальное значение 0, но вы можете зать значение и ниже 0 тоесть отрицательное число например -120 и на 120 пикселеи ваш клип уедет за экран, второе значение это правая сторона максимально сколько душе угодно =) с игриком тоже самое вверх за экран отрицательное либо 0 если вровень вниз сколько будет угодно
var Go:Array = [-3, 3];//здесь скоростьдвижения первое значение это для движения влево либо вверх если у вас стоит игрик вместо икса, второе значение движение вправо либо вниз по игрику
for (var i:Number = 0; i<=2; i++) {
this["button"+i].o = i;
this["button"+i].onPress = function() {
g = this.o;
mc.onEnterFrame = function() {
this._x += Go[g-1];
if (this._x<=Min_Max[g-1] && g == 1 || this._x>=Min_Max[g-1] && g == 2) {
this._x = Min_Max[g-1];
}
};
};
this["button"+i].onRelease = function() {
delete mc.onEnterFrame;
};
}