Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   прилипание двух кружочков (http://www.flasher.ru/forum/showthread.php?t=88024)

dedsky 15.11.2006 18:31

прилипание двух кружочков
 
Нарисовал больше года назад, потом забросил флеш, решил поднять, а исходников нету. Вобщем по-новой начал рисовать (нашел какие-то записи), но че-то непонятка возникла. В-общем не работает (или криво работает) функция prilip.
Кто поймет, помогите :wacko:
Код:

var R = 100;
//зазор для срабатывания прилипания
var RAZN = 30;
//функция рисования окружности
function circle(R:Number, step:Number, X0:Number, Y0:Number, thickness:Number, rgb:Number, alpha:Number, rgb2:Number, alpha2:Number):Void {
        this.lineStyle(thickness, rgb, alpha);
        this.beginFill(rgb2, alpha2);
        this.moveTo(X0+R, Y0);
        var angl:Number = 2*Math.PI/step;
        var R1:Number = R/Math.cos(angl/2);
        var controlX:Number = null, controlY:Number = null;
        var anchorX:Number = null, anchorY:Number = null;
        for (var phi = angl; phi<=2*Math.PI; phi += angl) {
                controlX = X0+R1*Math.cos(phi-angl/2);
                controlY = Y0-R1*Math.sin(phi-angl/2);
                anchorX = X0+R*Math.cos(phi);
                anchorY = Y0-R*Math.sin(phi);
                this.curveTo(controlX, controlY, anchorX, anchorY);
        }
        endFill();
}
//функция прилипания
function prilip(x1:Number, x2:Number, y1:Number, y2:Number):Void {
        var x1:Number = circ_sin._x;
        var y1:Number = circ_sin._y;
        var x2:Number = circ_krasn._x;
        var y2:Number = circ_krasn._y;
        var dist:Number = Math.sqrt(Math.pow((x2-x1), 2)+Math.pow((y2-y1), 2));
        var sin_ang:Number = (x2-x1)/dist;
        var cos_ang:Number = (y2-y1)/dist;
        if (Math.abs(x2-x1)<=RAZN && Math.abs(y2-y1)<=RAZN) {
                circ_krasn._x = x1;
                circ_krasn._y = y1;
                circ_sin._x = x2;
                circ_sin._y = y2;
        } else if (dist<=2*R+RAZN && dist>=2*R-RAZN) {
                dist = 2*R;
                circ_krasn._x = sin_ang*dist+x1;
                circ_krasn._y = cos_ang*dist+y1;
        }
}
Object.prototype.circle = circle;
Object.prototype.prilip = prilip;
_root.createEmptyMovieClip("circ_sin", 1);
_root.createEmptyMovieClip("circ_krasn", 2);
circ_sin.circle(100, 10, 400, 300, 3, 0x0000FF, 80, 0x0000FF, 50);
circ_krasn.circle(100, 10, 500, 300, 3, 0xFF0000, 80, 0xFF0000, 50);
MovieClip.prototype.onPress = function():Void  {
        this.startDrag();
        _root.onMouseMove = function() {
                clear();
                draw();
                updateAfterEvent();
        };
};
MovieClip.prototype.onRelease = MovieClip.prototype.onReleaseOutside=function ():Void {
        stopDrag();
        this.prilip();
        delete _root.onMouseMove;
};


iNils 15.11.2006 18:33

А что должно получится то?

dedsky 15.11.2006 18:38

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


Часовой пояс GMT +4, время: 06:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.