PDA

Просмотр полной версии : изменение размера клипа


Fokker
14.07.2005, 18:23
День добрый ,Джентельмены.
в виде урока решил написать простенькую программку и весело споткнулся на ней :)

Сценарий простой:

при наведении мышки на объект (шар) он должен постепенно увеличиваться в размерах в зависимости от положения курсора мыши,чем ближе к центру шара,тем размер шара больше, при выходе мыши за пределы границ размер шара восстанавливается.

Как правильно написать вышеуказанный сценарий? Мой вариант такой:
Создаем клип ball_mc с радиусом 100

Задаем переменные :
«точка1» , «точка 2», «коэффициент».

Задаем свойства «точек» (надо ли это делать не знаю)

Привязываем координаты «точки1» к координатам мыши , а «точку2» к координатам центра шара.

Задаем условие :

Если координата x «точки1» >= x «точки2»-100 и x «точки1» <= x «точки2»+100 и то же для у, то выполняется выражение :
Вычисляется «коэффициэнт»

Если х «т1» >= х «т2» -100 и х «т1» <= х «т2» то
К = х «т1» -( «хт2»-100)
Иначе
К = ( х «т2»+100)-х «т1»

Далее
K=K/100

Далее размеры клипа увеличиваются
_scale=100*(1+K)

Выражение заканчивается.

Таким образом имеем максимальное увеличение шара в 200 процентов

Джентельмены, рабочий ли такой сценарий? Какие поправки или изменения нужны?
И как все это на язык ActionScript2 перевести?


Есстественно у меня ничего не работает :)...
Второй вариант родился позже...думается надо использовать функцию.

написал такой код :

function grow ( ) {
var xB ;// точка привязанная к центру шара
var xM ;// как бы точка привязанная к указателю мыши
var k ;// коэффициент,необходимый для вычислений
xB = _this._x;
xM =_root._xmouse;

if (xB >= xM-100 && xB<=xM) {
k=xB-(xM-100);
k=k/100;
ball_mc._scale= 100*(1+k);
}
}
Ball_mc.onRollOver = grow ;


Помидорами в начинающих просьба не кидать.

Futs
14.07.2005, 19:06
Держи и не мучайся
ball_mc.onEnterFrame = function() {
var dx = this._parent._xmouse-this._x;
var dy = this._parent._ymouse-this._y;
var D = Math.sqrt((dx*dx)+(dy*dy));
this.scale_X = (-Math.abs(D)+100)*2;
this.scale_Y = this.scale_X;
if (this.scale_X<=100) {
this.scale_X = 100;
this.scale_Y = 100;
}
var delta_scaleX = this.scale_X-this._xscale;
var delta_scaleY = this.scale_Y-this._yscale;
if (this.scale_X>=100) {
this._xscale += delta_scaleX/10;
this._yscale += delta_scaleY/10;
}
};

Fokker
14.07.2005, 19:30
благодарствую :)
.....
из к.ф " белое солнце пустыни"
-тебя сразу убить,или помучаешься?
-уж лучше помучаюсь...

:)

Fokker
15.07.2005, 12:19
ух...почти разобрался...
не могу понять строчки с 11 по 15...если можете,прокоментируйте их...
и еще момент,клип ведет не совсем так...вопрос в пропорциях изменения,он должен быть линейным, а в вышеуказанном сценарии шар увеличивается значительно больше при подходе к центру, а на краях почти не реагирует на мышь...

еще раз спасибо (благодаря вам,еще немного знаний черпнул)

Fokker
15.07.2005, 12:24
и еще один интересный моментик, клип как-то с замедлением реагирует на мышь...то есть если быстро провести мышью по шару,то он не успевает увеличиться...а как увеличить скорость изменения размера? (чтоб синхронно с проходом указателя мыши изменялся?)

....
но в любом случае здорово, уже можно кнопки поинтереснее делать.

KUZEN
15.07.2005, 12:31
и еще один интересный моментик, клип как-то с замедлением реагирует на мышь...то есть если быстро провести мышью по шару,то он не успевает увеличиться...а как увеличить скорость изменения размера? (чтоб синхронно с проходом указателя мыши изменялся?)

....
но в любом случае здорово, уже можно кнопки поинтереснее делать.
вот эта штуковина тебе немного поможет updateAfterEvent();
ball_mc.onEnterFrame = function() {
var dx = this._parent._xmouse-this._x;
var dy = this._parent._ymouse-this._y;
var D = Math.sqrt((dx*dx)+(dy*dy));
this.scale_X = (-Math.abs(D)+100)*2;
this.scale_Y = this.scale_X;
if (this.scale_X<=100) {
this.scale_X = 100;
this.scale_Y = 100;
}
var delta_scaleX = this.scale_X-this._xscale;
var delta_scaleY = this.scale_Y-this._yscale;
if (this.scale_X>=100) {
this._xscale += delta_scaleX/10;
this._yscale += delta_scaleY/10;
}
//
updateAfterEvent();
//
}

Futs
15.07.2005, 14:11
Измени 100 на 50 (кроме(-Math.abs(D)+100)*2 здесь попробуй подставить свое значение) увидиш что выйдет

Fokker
15.07.2005, 14:45
Джентельмены,прокоментируйте эту строчку пож.

var delta_scaleX = this.scale_X - this._xscale;

понятно,что задаем переменную и присваиваем ей значение, только я въехать не могу,что такое _xscale....и если можете,то растолкуйте ,как Фидель Кастро,по пунктам это выражение...ну не пойму я его никак..

KUZEN
15.07.2005, 14:50
_xscale это маштабирование по горизонтали

Futs
15.07.2005, 14:53
ну ты даешь, жми F1

Fokker
15.07.2005, 15:11
блин, даже о такой вещи как нажать F1 я не додумался....сафсем старый стал...

изменил немного выражение на
D=D/100;
this.scale_X=(2-D)*100;


и в конце
updateAfterEvent();
но блин практически ничего не изменилось....
изменения шара все равно не мгновенные....я не пойму,может это Флэш
тратит столько времени на обсчет программы ??? (хотя там всего несколько строк)...Мышку уберешь из шарика он чуть ли не 3 секунды тратит на исходное положение,потихоньку "сдуваясь"...чудно как-то...

KUZEN
15.07.2005, 15:13
может твой шар какой нить крутой растр ... давай исход поправим ...

Fokker
15.07.2005, 16:01
я вот прикрипил Fla-шку,она ей богу не большая.
самое интересно,что шарик -самый элементарный векторный элемент...
посмотрите ,если есть время.

old_dark_elf
15.07.2005, 16:07
а ты фпс поставь побольше - все будет плавненько :)

KUZEN
15.07.2005, 16:13
Поставь fps побольше и ещё пожешь поиграть с коэффициэнтами которые в конце
this._xscale += delta_scaleX/ 2;
this._yscale += delta_scaleY/ 2;

Fokker
15.07.2005, 17:55
ок...попробую

Fokker
15.07.2005, 17:59
спасибо за советы, все заработало,как хотел.