Форум 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=169717)

Dima998 10.10.2011 21:33

проблема с рисовалкой
 
начал писать рисовалку(без использования graffiti library) и возникли проблемы с созданием инструмента прямоугольник, оно не "растягивает прямоугольник" а как-бы "оставляет следы", посмотрите сами.
вот та самая часть кода:
Код AS3:

function downed(event:MouseEvent) { //проверяю что в данный момент кнопка мыши зажата
                                if (pole.fld.hitTestPoint(event.stageX,event.stageY,true)) { //таким образом проверяю - находится ли курсор в пределах поля для рисования
                                        if (tool==1) { //если выбран инструмент карандаш
                                        dp++; //увеличиваю счетчик объектов
                                        pole['o' + dp]=new Sprite(); //создаю новый спрайт
                                        pole['o' + dp].x=0; //ставлю его координаты по нулям
                                        pole['o' + dp].y=0;
 
                                        xx=pole.mouseX; //запоминаю координаты места нажатия мыши
                                        yy=pole.mouseY;
 
                                        pole['o' + dp].graphics.lineStyle(tnk.value,clr.selectedColor,(alp.value/100)); //настраиваю стиль рисования
                                        pole['o' + dp].graphics.moveTo(pole.mouseX,pole.mouseY); //делаю так чтоб рисование началось с места нажатия мыши
                                        pole['o' + dp].graphics.lineTo(pole.mouseX + 0.3,pole.mouseY + 0.3); //таким образом ставлю точку при нажатии
                                        pole.addChild(pole['o' + dp]); //ставлю спрайт на сцену
                                        work=true; //этой переменной обозначаю что кнопка мыши зажата
                                }
                        }
                        function upped(event:MouseEvent) { //если кнопка мыши была отпущена
                                drw = true; //эта переменная тут нечего не касается
                                work=false; //обозначаю что кнопка мыши отпущена
                        }
                        function moved(event:MouseEvent) {
                                if (work) { //проверяю что кнопка мыши зажата
                                        if (tool==1) { //если выбран инструмент карандаш
                                        pole['o' + dp].graphics.lineTo(pole.mouseX,pole.mouseY); //рисую
                                        } else if(tool==3) { //если выбран инструмент прямоугольник
//рисую прямоугольник, в этом блоке проблема
                                                pole['o' + dp].graphics.lineTo(pole.mouseX,yy);
                                                pole['o' + dp].graphics.lineTo(pole.mouseX,pole.mouseY);
                                                pole['o' + dp].graphics.lineTo(xx,pole.mouseY);
                                                pole['o' + dp].graphics.lineTo(xx,yy);
                                        }
                                }
                        }

http://waskes.ucoz.ru/pnt.swf - вот приложение

goodguy 10.10.2011 21:43

Где в коде хоть один комментарий?
Как-то нет желания сидеть и ломать голову, пытаясь понять, а что происходит тут или тут, и что должно происходить

Dima998 10.10.2011 21:48

ок, сейчас исправлю

GBee 10.10.2011 21:48

clear надо вызывать.

Dima998 10.10.2011 21:57

готово

Добавлено через 4 минуты
Цитата:

Сообщение от GBee (Сообщение 1038246)
clear надо вызывать.

хм... где именно?
оно же будет вытирать весь мой спрайт...
или как-то надо по-другому применить? не подскажите?

Inet_PC 10.10.2011 22:12

У Вас по всему коду нетипизированный доступ к переменным. Этого лучше избежать. Вам нужно иметь два слоя : на первом основная-общая фигура, а на втором текущая, и при каждой перерисовке текущей фигуры, стирать дополнительный слой,а при смене фигуры переносить все на основной.

Dima998 10.10.2011 22:18

не понял о каких слоях вы говорите

GBee 10.10.2011 22:20

Цитата:

хм... где именно?
оно же будет вытирать весь мой спрайт...
или как-то надо по-другому применить? не подскажите?
Для активного тулза используйте отдельный спрайт, а осле окончания рисования копируйте с него на основной. Для рисования прямоугольника вам надо затирать предыдущий.

Dima998 10.10.2011 22:29

Цитата:

Сообщение от GBee (Сообщение 1038261)
Для активного тулза используйте отдельный спрайт, а осле окончания рисования копируйте с него на основной. Для рисования прямоугольника вам надо затирать предыдущий.

то есть, перед каждым рисованием("растягиванием") вытирать спрайт?
вроде как должно все работать как хотелось но оно почему-то после этого вообще его не рисует =(

Добавлено через 9 минут
ну почти разобрался, после clear() почему-то обнуляется lineStyle и moveTo, ну нечего исправил, но еще почему-то не дорисовывает одну линию у прямоугольника

Добавлено через 11 минут
все, окончательно разобрался, работает, всем спасибо за помощь =)

GBee 10.10.2011 23:08

Еще у graphics есть метод drawRect ;о))


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

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