PDA

Просмотр полной версии : проблема с рисовалкой


Dima998
10.10.2011, 21:33
начал писать рисовалку(без использования graffiti library) и возникли проблемы с созданием инструмента прямоугольник, оно не "растягивает прямоугольник" а как-бы "оставляет следы", посмотрите сами.
вот та самая часть кода:
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 минуты
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
Для активного тулза используйте отдельный спрайт, а осле окончания рисования копируйте с него на основной. Для рисования прямоугольника вам надо затирать предыдущий.

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

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

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

GBee
10.10.2011, 23:08
Еще у graphics есть метод drawRect ;о))

Dima998
11.10.2011, 17:02
да? спасибо, буду пробовать =)