![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2001
Сообщений: 36
|
Есть шарик, вот с таким кодом:
onClipEvent (mouseMove) { a=this._parent._xmouse; b=this._parent._ymouse; if ((a>9) && (a<80) && (b>11) && (b<82)) {this._x = this._parent._xmouse; this._y = this._parent._ymouse;} } Соответственно движется за мышой в заданном квадрате... А надо, чтобы все было точно так, но чтобы он двигался по окружности в тех же границах... Воотсетственно, нужно координату x не трогать, а y как определить в зависимости от х? Вроде как по логике - из уравнения окружности: (x-xx)*(x-xx)+(y-yy)*(y-yy)=R*R Соответственно хх и уу - координаты центра... R - радиус... А как это все во флеш загнать? Какой формулой? |
|
|||||
|
есть такие замечательные функции, как sin и cos
|
|
|||||
|
Регистрация: Apr 2001
Сообщений: 36
|
А поподробнее можно, как с их помощью записать? И куда девать координаты центра?
|
|
|||||
|
"человек"
Регистрация: Nov 2002
Адрес: +-
Сообщений: 1,807
|
хе-хе, триганометрия
вот самый простой пример теорема Пифагора/* функция рисования nuran'а
уже 3'тий раз на форуме пишу, использую для рисования окружности, чтобы было видно границы */
MovieClip.prototype.circle = function(x, y, r) {
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};
this.createEmptyMovieClip("circle1",500)
with(circle1){
lineStyle(5,0x000000,100)
circle(0,0,100)
_x=Stage.width/2
_y=Stage.height/2
}
with(this.createEmptyMovieClip("mc",1)){
lineStyle(5,0xFF0000,100)
lineTo(.5,.5)
_x=Stage.width/2
_y=Stage.height/2
}
mc.onEnterFrame=function(){
this.delta_x=Stage.width/2-_xmouse
this.delta_y=Stage.height/2-_ymouse
if(Math.sqrt(this.delta_x*this.delta_x+this.delta_y*this.delta_y)<95){
this._x=_xmouse
this._y=_ymouse
}else{
this.a=180+(Math.atan2(this.delta_y,this.delta_x)*180)/Math.PI
this.r=95
this._x=Math.cos(this.a*(Math.PI/180))*this.r+Stage.width/2
this._y=Math.sin(this.a*(Math.PI/180))*this.r+Stage.height/2
}
}
// by Techmaker (newtech@front.ru)
![]()
__________________
flash it |
|
|||||
|
типа этого
решено с помошью уравнения пифагора |
|
|||||
|
2 Techmaker:
у меня код значительно попроще... это я тупее или круче получаюсь? ![]() |
|
|||||
|
"человек"
Регистрация: Nov 2002
Адрес: +-
Сообщений: 1,807
|
Цитата:
а у меня всё плавно, к тому же у меня ещё код не относящийся к теме, добавлен просто для нагляности границ: /* функция рисования nuran'а
уже 3'тий раз на форуме пишу, использую для рисования окружности, чтобы было видно границы */
MovieClip.prototype.circle = function(x, y, r) {
var mas = new Array();
var step = 16;
var angle = 360/step;
var rad = Math.PI/180;
for (var i = 0; i<=step; i++) {
mas[i] = new Object();
mas[i].x = Math.cos(angle*rad*i)*r+x;
mas[i].y = Math.sin(angle*rad*i)*r+y;
}
this.moveTo(mas[0].x, mas[0].y);
for (var i = 0; i<step; i += 2) {
// curveThreeTo
var cx = 2*mas[i+1].x-0.5*(mas[i].x+mas[i+2].x);
var cy = 2*mas[i+1].y-0.5*(mas[i].y+mas[i+2].y);
this.curveTo(cx, cy, mas[i+2].x, mas[i+2].y);
}
};
this.createEmptyMovieClip("circle1",500)
with(circle1){
lineStyle(5,0x000000,100)
circle(0,0,100)
_x=Stage.width/2
_y=Stage.height/2
}
mc.onEnterFrame=function(){
this.delta_x=Stage.width/2-_xmouse
this.delta_y=Stage.height/2-_ymouse
if(Math.sqrt(this.delta_x*this.delta_x+this.delta_y*this.delta_y)<95){
this._x=_xmouse
this._y=_ymouse
}/*...*/
}
with(this.createEmptyMovieClip("mc",1)){
lineStyle(5,0xFF0000,100)
lineTo(.5,.5)
}
mc.onEnterFrame=function(){
this.delta_x=Stage.width/2-_xmouse
this.delta_y=Stage.height/2-_ymouse
this.a=180+(Math.atan2(this.delta_y,this.delta_x)*180)/Math.PI
this.r=95
this._x=Math.cos(this.a*(Math.PI/180))*this.r+Stage.width/2
this._y=Math.sin(this.a*(Math.PI/180))*this.r+Stage.height/2
}
// by Techmaker (newtech@front.ru)
![]()
__________________
flash it Последний раз редактировалось Techmaker; 04.11.2003 в 15:19. |
|
|||||
|
Techmarker!
Я твой код ещё не стал разбирать, но. кажется, окружность ты строишь по определённым координатам, а границы движения проводишь взависимости от Stage! Просто разверни окашко нра весь экран ![]() |
|
|||||
|
а так?
![]() |
|
|||||
|
"человек"
Регистрация: Nov 2002
Адрес: +-
Сообщений: 1,807
|
Цитата:
координаты указываёте свои ![]()
__________________
flash it |
![]() |
Часовой пояс GMT +4, время: 01:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|