Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   уменьшить интервал (http://www.flasher.ru/forum/showthread.php?t=117912)

incvizitor 10.11.2008 16:58

уменьшить интервал
 
Начал делать простой растовый графический редактор.

И вот есть такой код, что бы рисовать пиксели:

Код:

private function startDraw(evt:MouseEvent)
{
        //addEventListener(Event.ENTER_FRAME,drawing)
        setInterval(drawing,1);
}

private function drawing(evt:Event=null)
{
        var pX=Math.floor(mouseX);
        var pY=Math.floor(mouseY);
        for(var i=-1;i<=1;i++)
                for(var j=-1;j<=1;j++)
                    primary.bitmapData.setPixel(pX+i,pY+j,curColor);
}

Проблема что интервал очень большой, и поэтому когда я вожу мышь по рабочей области с большой скоростью между пикселями создаётся растояние... Как быть???

Смольный (Smolniy) 10.11.2008 17:13

Считать расстояние между старым и новым положением, и если оно больше х, в цикле расставлять там точки от старого положения до нового, с заданной плотностью.
ВыШШий пилотаж - это строить кривую безье из нескольких предыдущих точек измерений, и расставлять новые точки на дорисуемом отрезке не по линии, а по кривой, но это уже скорее всего передоЗ.

gen4 10.11.2008 17:14

1. onMouseMove
2. рисовать линию между последней и предпоследней точкой.

incvizitor 10.11.2008 17:23

Цитата:

Сообщение от gen4 (Сообщение 775926)
1. onMouseMove
2. рисовать линию между последней и предпоследней точкой.

Я так тоже думал. Но вот в случае с кривой, как найти пунты по которым её построить? Если написать функцию которая заганяет их в массив, то она тоже будет выполнятся с интервалом... Тут нужен цикл покуда мышу не отожмёшь, но вот как его сделать???

silin 10.11.2008 18:02

можно рисовать линию в шейпе, а сам шейп копировать в битмап на каждой итерации
Код AS3:

private function drawing(evt:Event=null):void
{
        var tmp:Shape = new Shape();
        tmp.graphics.lineStyle(3, 0xFF0000);
        tmp.graphics.moveTo(prevX, prevY);
        tmp.graphics.lineTo(mouseX, mouseY);
        prevX = mouseX;
        prevY = mouseY;
        bitmap.bitmapData.draw(tmp);
}


AL.exe 10.11.2008 23:01

Цитата:

можно рисовать линию в шейпе, а сам шейп копировать в битмап на каждой итерации
Только при быстрых вращениях мыши будут появляться углы. Тут кривые Безье обязательно нужны :(

s8000_1 10.11.2008 23:18

AL.exe, алгоритм, как пририсовать к кривой безье (которая уже нарисована) новую кривую безье (которая ведет к новой точке) и чтобы они были сглажены, не подскажете? :)
Я голову сломал, но так и не сделал это (

silin 10.11.2008 23:31

не совсем в тему, но вариант (в левом примере подергай последнюю точку)

Alex Lexcuk 10.11.2008 23:50

http://www.dnadillo.dn.ua/fla/bit_to_bezier.zip

incvizitor 11.11.2008 18:59

Спасибо я ещё не совсем разобрался в примере, но это - то что надо


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

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