Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.10.2011, 21:33
Dima998 вне форума Посмотреть профиль Отправить личное сообщение для Dima998 Найти все сообщения от Dima998
  № 1  
Ответить с цитированием
Dima998
 
Аватар для Dima998

Регистрация: Aug 2011
Сообщений: 121
Attention проблема с рисовалкой

начал писать рисовалку(без использования 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 - вот приложение


Последний раз редактировалось Dima998; 10.10.2011 в 21:57.
Старый 10.10.2011, 21:43
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Где в коде хоть один комментарий?
Как-то нет желания сидеть и ломать голову, пытаясь понять, а что происходит тут или тут, и что должно происходить

Старый 10.10.2011, 21:48
Dima998 вне форума Посмотреть профиль Отправить личное сообщение для Dima998 Найти все сообщения от Dima998
  № 3  
Ответить с цитированием
Dima998
 
Аватар для Dima998

Регистрация: Aug 2011
Сообщений: 121
ок, сейчас исправлю

Старый 10.10.2011, 21:48
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
clear надо вызывать.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 10.10.2011, 21:57
Dima998 вне форума Посмотреть профиль Отправить личное сообщение для Dima998 Найти все сообщения от Dima998
  № 5  
Ответить с цитированием
Dima998
 
Аватар для Dima998

Регистрация: Aug 2011
Сообщений: 121
готово

Добавлено через 4 минуты
Цитата:
Сообщение от GBee Посмотреть сообщение
clear надо вызывать.
хм... где именно?
оно же будет вытирать весь мой спрайт...
или как-то надо по-другому применить? не подскажите?

Старый 10.10.2011, 22:12
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 6  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
У Вас по всему коду нетипизированный доступ к переменным. Этого лучше избежать. Вам нужно иметь два слоя : на первом основная-общая фигура, а на втором текущая, и при каждой перерисовке текущей фигуры, стирать дополнительный слой,а при смене фигуры переносить все на основной.
__________________
http://www.chessmax.ru

Старый 10.10.2011, 22:18
Dima998 вне форума Посмотреть профиль Отправить личное сообщение для Dima998 Найти все сообщения от Dima998
  № 7  
Ответить с цитированием
Dima998
 
Аватар для Dima998

Регистрация: Aug 2011
Сообщений: 121
не понял о каких слоях вы говорите

Старый 10.10.2011, 22:20
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
хм... где именно?
оно же будет вытирать весь мой спрайт...
или как-то надо по-другому применить? не подскажите?
Для активного тулза используйте отдельный спрайт, а осле окончания рисования копируйте с него на основной. Для рисования прямоугольника вам надо затирать предыдущий.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 10.10.2011, 22:29
Dima998 вне форума Посмотреть профиль Отправить личное сообщение для Dima998 Найти все сообщения от Dima998
  № 9  
Ответить с цитированием
Dima998
 
Аватар для Dima998

Регистрация: Aug 2011
Сообщений: 121
Цитата:
Сообщение от GBee Посмотреть сообщение
Для активного тулза используйте отдельный спрайт, а осле окончания рисования копируйте с него на основной. Для рисования прямоугольника вам надо затирать предыдущий.
то есть, перед каждым рисованием("растягиванием") вытирать спрайт?
вроде как должно все работать как хотелось но оно почему-то после этого вообще его не рисует =(

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

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

Старый 10.10.2011, 23:08
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Еще у graphics есть метод drawRect ;о))
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
прямоугольник , рисовалка

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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