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

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

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

Регистрация: Jun 2010
Сообщений: 107
По умолчанию почему не работает lineStyle?

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

Код AS3:
graphicWidth = getAllDays(startDateSeconds, nowDateSeconds)*(Graphic.oneDayWidthPixels/resolution);
 
			grayRect.graphics.lineStyle(1);
			grayRect.graphics.beginFill(0xc0c0c0, 1);
			grayRect.graphics.moveTo(0, 0);
			grayRect.graphics.lineTo(graphicWidth, 0);
			grayRect.graphics.lineTo(graphicWidth, calendarHeigth);
			grayRect.graphics.lineTo(0, calendarHeigth);
			grayRect.graphics.lineTo(0, 0);
Поясняю. Переменная oneDayWidthPixels в классе Graphic типа Number отвечает за длину grayRect'а;
Если oneDayWidthPixels в классе Graphic равна 3 или меньше, то толщина линий grayRect'а получается нормальная - 1. А если больше 3 - то произвольная, выбранная, очевидно, по воле богов.

Не понимаю, почему lineStyle(1) не работает если oneDayWidthPixels > 3. Может я что-то забыл импортнуть, чтобы lineStyle работал корректно? я импортнул
Код AS3:
import flash.display.*;
	import flash.geom.*;
У кого-нибудь вообще такое было? Как решили?

ЗЫ. Да, и причем всегда меняется толщина только верхней и нижней линии, боковые остаются нормальными.


Последний раз редактировалось Light; 21.07.2011 в 13:54.
Старый 21.07.2011, 13:56
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Переопределяйте сеттеры width и height, где отрисовывайте прямоугольник заново с бордюром. Из-за масштабирования толщина линии меняется. Или используйте так называемую волосяную линию, толщина которой 0. В таком случае тодщина будет ровно 1 пиксель при любом масштабе.
__________________
тут я

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
есть метод drawRect ;о)

А какие значения у graphicWidth и calendarHeigth?


P.S. heigHT
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ищите ошибку в другом месте. По этому обрывку ничего не понять. И конечно же здесь никакой роли не играет Graphic.oneDayWidthPixels, толщина линии задано хардом (1), а не переменной. Ищите скейл или изменение width хозяина графикса или его контейнеров, повторную отрисовку прямоугольника ( можно в начале отрисовки поставить grayRect.graphics.clear() ). И рассмотрите возможность вообще не пользоваться линейной обводкой, заменяя ее на заливку (два наслоенных прямоугольника).
__________________
Reality.getBounds(this);

Старый 21.07.2011, 14:04
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 5  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Читайте доку, особое внимание обратите на параметр scaleMode

Старый 21.07.2011, 14:24
Light вне форума Посмотреть профиль Отправить личное сообщение для Light Найти все сообщения от Light
  № 6  
Ответить с цитированием
Light

Регистрация: Jun 2010
Сообщений: 107
КорДум, да этот прямоугольник не масштабируется, пока что просто отрисовывается единожды с тем параметрами, которые заданы в приведенном коде. Попробовал поставить lineStyle(0) - никаких изменений в поведении, что еще более странно. Если lineStyle(0), то почему линия видна?

GBee, да, я знаю про drawRect
Просто когда увидел этот глюк, попробовал нарисовать прямоугольник по линиям - вдруг поможет? Не помогло.
calendarHeigth = 30
graphicWidth высчитывается и зависит от многих параметров. При oneDayWidthPixels = 4, graphicWidth = 60704, при oneDayWidthPixels = 3, graphicWidth = 45528

Wolsh, grayRect.graphics.clear() не помог. Прямоугольник у меня не отрисовывается повторно, только единожды. Да и если бы отрисовывался, логично было бы предположить, что увеличение толщины верхней и нижней линии прямоугольника происходит из-за растяжения прямоугольника по высоте, но height-то у него всегда фиксированный - 30, в отличие от width и ни в каком месте кода он не растягивается... Загадка...

Чувствую я, что вся загвоздка в том, что не работает lineStyle, а он не работает получается, раз на lineStyle(0) - ноль реакции. Почему может быть такое что задавая lineStyle(0) все равно рисуется видимая обводка?

Старый 21.07.2011, 14:27
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 7  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Вы рисуете векторную шутку, она масштабируется в зависимости от настроек лайнстайла, их там много, проверьте scaleMode линиям какой вы задаёте. lineStyle(0) - особый случай, это однопиксельная линия которая при масштабировании остаётся однопиксельной.

Старый 21.07.2011, 14:30
Light вне форума Посмотреть профиль Отправить личное сообщение для Light Найти все сообщения от Light
  № 8  
Ответить с цитированием
Light

Регистрация: Jun 2010
Сообщений: 107
Aquahawk, не помогло, сделал так:
Код AS3:
grayRect.graphics.lineStyle(0, 0x000000, 1.0, true, LineScaleMode.NONE);
			grayRect.graphics.beginFill(0xc0c0c0, 1);
			grayRect.graphics.moveTo(0, 0);
			grayRect.graphics.lineTo(graphicWidth, 0);
			grayRect.graphics.lineTo(graphicWidth, calendarHeigth);
			grayRect.graphics.lineTo(0, calendarHeigth);
			grayRect.graphics.lineTo(0, 0);
Как будто компилятор в упор не видит заданного lineStyle'а

Старый 21.07.2011, 14:37
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 9  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
в коде выше указано: grayRect.graphics.lineStyle(0, 0x000000, 1.0, true, LineScaleMode.NONE); - размер линии = 0.

в итоге: может Вы не видите ее (линию) ? (сливается с фоном, в альфе спрятана).

в дополнение: если меняется контейнер(размеры), где рисуется, то изменяется вся картинка в контейнере, отсюда вопрос, возможно у Вас меняется размер контейнера и от этого и линия рисуется другая?


Последний раз редактировалось t4arty; 21.07.2011 в 14:39.
Старый 21.07.2011, 14:41
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 10  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Не пойму что не работает:
http://*************/s/14hoW - lineStyle 5.
http://*************/s/14hpw - 3.
http://*************/s/14hpK - 1.
Все меняет как надо (вне зависимости от width, height). Код взят ваш.
__________________
Кодинг, багинг, алгоритминг. me @

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

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

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


 


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


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