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

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

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
По умолчанию Неправильная заливка при отрисовке через DrawPath

всем привет, помогите решить проблему.
объект отрисовывается по линиям через DrawPath , заливается битмапом, но при добавлении нескольких линий в центр объекта, заливка становится корявой, появляется белой пятно, нужно чтобы все заливалось равномерно, вне зависимости от того какие внутри еще рисуются линии или фигуры. Все линии рисуются по одному пути рисования (тоесть по 1-му вектору комманд и координат).
Название: 123345.jpg
Просмотров: 366

Размер: 9.5 Кб

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
endFill()
__________________
Reality.getBounds(this);

Старый 30.08.2012, 11:17
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
энд филл есть
Код AS3:
fillShape.graphics.beginBitmapFill(fillBitmapData);
fillShape.graphics.drawPath(commands,coords);
fillShape.graphics.endFill();
тут проблема в том что все отрисовано одним набором комманд, и внешняя фигура и внутренняя, я вот и думаю есть ли какие стандартные методы чтобы такого эффекта избежать

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
endFill должен вызываться до того, как будут отрисованы внутренние линии.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.08.2012, 11:26
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 5  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
а другие есть способы?
просто я нарисовал простую фигуру, а у меня они бывают очень сложные где много moveTo методов, и определить перед каким нужно закончить заливку проблематично..

Старый 30.08.2012, 11:35
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Очевидно, перед каждым moveTo.
Плеер тоже не может интуитивно догадаться, что Вы хотите получить в итоге. При пересечении контуров действует winding. Да, чаще мешает чем помогает, но без него было бы невозможно делать "дырки" внутри замкнутых контуров.
Каждый moveTo по сути начинает новый контур. Надо закрыть предыдущий, чтобы не было виндинга. GraphicsEndFill такая же команда GraphicsData, как и все другие. А после нее еще надо заново объявлять заливку/обводку))
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 30.08.2012 в 12:02.
Старый 30.08.2012, 11:45
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 7  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
тоесть вариантов чтобы красиво залить больше нет, кроме как парсить массивы которые были изначала предназначены для отрисовки drawPath-ом, и делать конструкцию типа
Код AS3:
graphics.graphics.beginBitmapFill(fillBitmapData);
graphics.moveTo(0,0);
graphics.lineTo(0,100);
graphics.lineTo(100,100);
graphics.lineTo(100,0);
graphics.endFill();
 
graphics.beginFill(fillBitmapData);
graphics.moveTo(0x346333);
graphics.lineTo(0,100);
graphics.lineTo(100,100);
graphics.lineTo(100,0);
graphics.endFill();
и тд.?
но при этом все равно рисунок битмапы сместиться, вообще я думал что для drawPath есть какие нить стандартные методы чтобы нормально заливать по двум векторам без заморочек.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Что вы подразумеваете под "красиво"? Это нормальное поведение при заливке незамкнутых контуров (в большинстве векторных редакторов, реализация примерно такая же).
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.08.2012, 12:23
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 9  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
ну чтобы битмапа залила равномерно спрайт (без сдвигов рисунков и тп) вне зависимости от того сколько я еще дополнительно линий там не нарисовал
вектор комманд для отрисовки drawPath такой vecCommand = [1,2,2,2,2,1,2,2,2];
и мне кажется правильней чтобы заливка вела себя как правый вариант, нежели левый, а из-за такого поведения , приходится разбивать эти комманды (1,2,2,2,2,1,2,2,2) на moveTo , lineTo , внутри вставляя когда начинать заливку когда заканчивать, вместо того чтобы просто писать

Код AS3:
spr.graphics.beginBitmapFill(fillBitmapData);
spr.graphics.drawPath(vecCommand,vecCoords);
spr.graphics.endFill();
а дальше бы уже все объекты заливались одинаково
Нажмите на изображение для увеличения
Название: 1111111111111111111111.jpg
Просмотров: 206
Размер:	29.8 Кб
ID:	28394

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Ваше "правильней" не позволит создавать заливки с отверстиями.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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