PDA

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


Дядя Ваня
04.07.2003, 15:39
Привет!
Подскажите, пожалуйста, как возможно сделать такую штуку. Очень необходимо.
В ФМХ надо создать некое подобие системы координат. Некую функцию. Чтобы в свойствах объекта пишешь что-то типа "передвинуться самому на условные координаты (45, 90)", а на самом деле он двигается не на 45 по оси х и не на 90 по оси у, а, допустим, по формуле "условноХ=х+20, условноУ=у+30", то есть на 65 по х и на 120 по у

+=Metlio=+
04.07.2003, 18:43
А что у тебя будет двигаться по этой оси?
Или просто как текстовая хрень? :rolleyes:

DUDE
05.07.2003, 01:42
Так в чйм проблемма? так и говори ему куда надо двигатся!
my_movie_clip.x+=20 //или 30 или 40 или 300 сколько хочешь!

Murzin
05.07.2003, 16:35
сделай на клипе функцию - nuka_move_davay(x,y)

в которой напиши,
_x=x*(там на че-то)/(тоже на че-то)
_y=y*(там на че-то)/(тоже на че-то)

ну или _parent._x= ....попробуй как работать будет

да и вызывай my_clip.nuka_move_davay(45,-90);

вот и все...)))

Дядя Ваня
06.07.2003, 10:49
попробую

Дядя Ваня
07.07.2003, 13:50
Пробовал, пробовал, не врубаюсь! :D
В первом кадре пишу:

function locateStar (a,d) {
_x=a*60;
_y=d*60;
}

Потом у меня два объекта, допустим, на сцене. В первом пишу:

onClipEvent (enterFrame) {
a=5;
d=100;
this.locateStar (a,d);
}

а во втором:

onClipEvent (enterFrame) {
a=100;
d=10;
this.locateStar (a,d);
}

Не работает!!

Murzin
07.07.2003, 14:23
------------------------------------в первом кадре

function locateStar_x(a) {
return a*60;
}

function locateStar_y(a) {
return a*100;
}

--------------------------------- в объекте

onClipEvent (enterFrame) {
_x=_root.locateStar_x(5);
_y=_root.locateStar_y(3);
}

Дядя Ваня
07.07.2003, 17:28
Murzin, спасибо, работает прекрассно. А можно ли сделать так, чтобы в объекте было написано только, на какие координаты передвигать, что то вроде:

onClipEvent(enterFrame){a=20,b=30}

, а где-нибудь в другом месте (например, на главной сцене в первом кадре) была бы команда, что-то типа:

allClips.locateStar(a,b)

&&

derhab
07.07.2003, 19:06
Оригинал написал(а) Дядя Ваня
Пробовал, пробовал, не врубаюсь! :D
В первом кадре пишу:

function locateStar (a,d) {
_x=a*60;
_y=d*60;
}

Потом у меня два объекта, допустим, на сцене. В первом пишу:

onClipEvent (enterFrame) {
a=5;
d=100;
this.locateStar (a,d);
}
а во втором:

onClipEvent (enterFrame) {
a=100;
d=10;
this.locateStar (a,d);
}

Не работает!!


Естественно не работает:) Надо так:

onClipEvent (enterFrame) {
_root.locateStar (5,100);
}
во втором соответственно:

onClipEvent (enterFrame) {
_root.locateStar (100,10);
}

Murzin
07.07.2003, 21:50
2DERHAB :

Вы попробуйте, не поленитесь, будет ли так работать или нет.
Прежде чем давать совет уважаемому Дяде Ване, я пробовал упражняться с разными тхисами, сельфами, рутами и парентами, в предложенном Вами слдучае, как показала практика, вся сцена сдвигается туда, куда ее посылают, так как в функции определенной в первом кадре - _х и _у = это глобальные координаты флешки

С уважением и со всем таким или типа того :))))

derhab
08.07.2003, 01:10
ну поленился, а что такого?..:)

да это не принципиально, я хотел токо сказать, что уважаемый дядя Ваня параметры функции неправильно передает, а с тем что рут двигается, а не объект ..так это легко поправимо:

function locateStar (a,d,target) {
target._x=a*60;
target._y=d*60;
}

onClipEvent (enterFrame) {
_root.locateStar (2,6, this);
}

Дядя Ваня
08.07.2003, 10:06
во, спасибо!

Iv
09.07.2003, 00:07
как-то давненько я делал простой скриптец на эту тему и как ни странно, принцип до сих пор не изменился :D

MovieClip.prototype.stickyDrag = function(step) {
this.onMouseDown = function() {
if (this.hitTest(_root._xmouse, _root._ymouse, 1)) {
this.drag = true;
}
};
this.onEnterFrame = function() {
this._x += (this.x-this._x)*.7;
this._y += (this.y-this._y)*.7;
};
this.onMouseMove = function() {
if (this.drag) {
this.x = Math.round(this._parent._xmouse/step)*step;
this.y = Math.round(this._parent._ymouse/step)*step;
}
};
this.onMouseUp = function() {
delete this.drag;
};
};
_root.createEmptyMovieClip("mc", 1);
_root.mc.lineStyle(0, 0, 0);
_root.mc.beginFill(0xff0000, 100);
_root.mc.moveTo(-25, -25);
_root.mc.lineTo(25, -25);
_root.mc.lineTo(25, 25);
_root.mc.lineTo(-25, 25);
_root.mc.endFill();
_root.mc.stickyDrag(50);
_root.lineStyle(0, 0xFF0000, 100);
while (i<11) {
_root.moveTo(i*50+25, 25);
_root.lineTo(i*50+25, 375);
i++;
}
i = 0;
while (i<8) {
_root.moveTo(25, i*50+25);
_root.lineTo(525, i*50+25);
i++;
}




ты кода не пугайся - тут рисования больше
а принцип в этой строке:
новая_координата = Math.round(текущая_координата/шаг_сетки)*шаг_сетки;