Просмотр полной версии : Система координат
Дядя Ваня
04.07.2003, 15:39
Привет!
Подскажите, пожалуйста, как возможно сделать такую штуку. Очень необходимо.
В ФМХ надо создать некое подобие системы координат. Некую функцию. Чтобы в свойствах объекта пишешь что-то типа "передвинуться самому на условные координаты (45, 90)", а на самом деле он двигается не на 45 по оси х и не на 90 по оси у, а, допустим, по формуле "условноХ=х+20, условноУ=у+30", то есть на 65 по х и на 120 по у
+=Metlio=+
04.07.2003, 18:43
А что у тебя будет двигаться по этой оси?
Или просто как текстовая хрень? :rolleyes:
Так в чйм проблемма? так и говори ему куда надо двигатся!
my_movie_clip.x+=20 //или 30 или 40 или 300 сколько хочешь!
сделай на клипе функцию - 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);
}
Не работает!!
------------------------------------в первом кадре
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)
&&
Оригинал написал(а) Дядя Ваня
Пробовал, пробовал, не врубаюсь! :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);
}
2DERHAB :
Вы попробуйте, не поленитесь, будет ли так работать или нет.
Прежде чем давать совет уважаемому Дяде Ване, я пробовал упражняться с разными тхисами, сельфами, рутами и парентами, в предложенном Вами слдучае, как показала практика, вся сцена сдвигается туда, куда ее посылают, так как в функции определенной в первом кадре - _х и _у = это глобальные координаты флешки
С уважением и со всем таким или типа того :))))
ну поленился, а что такого?..:)
да это не принципиально, я хотел токо сказать, что уважаемый дядя Ваня параметры функции неправильно передает, а с тем что рут двигается, а не объект ..так это легко поправимо:
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
во, спасибо!
как-то давненько я делал простой скриптец на эту тему и как ни странно, принцип до сих пор не изменился :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(текущая_координата/шаг_сетки)*шаг_сетки;
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.