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

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

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

Регистрация: Mar 2011
Сообщений: 35
По умолчанию Неадекватная область содержимого

Привет.

Заранее извиняюсь, если вопрос будет нубским. Курил мануалы и гугл, но не нашёл ничего, что бы мне помогло.

Создаю экземпляр спрайта. Очищаю. Рисую. Ловлю событие мыши. Итоговый размер спрайта получается гораздо больше, чем его визуальная часть. Это видно, если сделать его фон непрозрачным, ну и мышь, соответсно, ловится этой "лишней" областью.

Пруф:
[IMG]http://plasmon.**********/4987754.image[/IMG]

Вот ключевой код:

Код AS3:
			// это в конструкторе
			m_CaptionContainer = new Sprite();
			f_Redraw_Caption();
			...
			m_CaptionContainer.addEventListener(MouseEvent.MOUSE_MOVE, f_MouseOverCaption);
 
...
 
		protected function f_Redraw_Caption()
		{
			m_CaptionEntity.x = m_CaptionEntity.y = m_Margin - 2;
 
			var w:Number = 2 * m_Margin + m_CaptionEntity.textWidth;
			var h:Number = 2 * m_Margin + m_CaptionEntity.textHeight;
 
			m_CaptionContainer.graphics.clear();
			m_CaptionContainer.graphics.lineStyle(1, 0xFFFFFF);
			m_CaptionContainer.graphics.beginFill(0xFFFFFF, 0.35);
			m_CaptionContainer.graphics.drawRect(0, 0, w, h);
			m_CaptionContainer.graphics.endFill();
 
			m_CaptionContainer.opaqueBackground = 0xFF0000; // для дебага
		}
 
...
 
		// для дебага
		protected function f_MouseOverCaption(event:MouseEvent)
		{
			Popup.instance.text = String(event.target)
				+ "\n" + m_CaptionContainer.width + " * " + m_CaptionContainer.height;
			Popup.instance.x = x + width;
			Popup.instance.y = event.stageY;
		}
Среда разработки (вдруг это имеет значение): CS5.
За стилистику не пинайте, я всего три дня в AS3, а душу уже продал С++.

Старый 29.03.2011, 22:35
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
А почему показан лишь кусок кода?
По нему ничего толком сказать нельзя. Но спрайт сам по себе не может быть больше, чем положено. Его размер, определяется размерами содержимого. Здесь видно текст филд внутри спрайта, от так же влияет на его размеры. Скорее всего по умолчанию этот текстфилд слишком высокий (я имею в виду не высоту текста, а высоту самого текстового поля), поэтому и спрайт тянется до ненужных размеров. Это можно проверить назачив текстфилду значения border и borderColor. Сам много раз наступал на эти грабли, причем даже несколько минут назад )


Последний раз редактировалось goodguy; 29.03.2011 в 22:39.
Старый 29.03.2011, 22:36
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 3  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Я подозреваю, что где-то в коде у вас присутствует строчка
Код AS3:
m_CaptionContainer.addChild(m_CaptionEntity);
Если я прав, то ситуацию можно объяснить тем, что текстовое поле имеет размеры по-умолчанию 100x100.

Добавлено через 3 минуты
Отключить реакцию на мышь у текстового поля можно установив свойство mouseEnabled в false.

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
а сократить размеры текстового поля до тех которые реально занимает текст можно:
Код AS3:
 var myText:TextField = new TextField();
 myText.autoSize = "left";
Добавлено через 1 минуту
вообще, подробнее здесь: http://help.adobe.com/ru_RU/AS3LCR/F....html#autoSize

Старый 30.03.2011, 00:35
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
За стилистику не пинайте, я всего три дня в AS3, а душу уже продал С++.
На С++ тоже нормально пишут, а не убогой венгерской нотацией. В AS пишут почти так же.
Если задержитесь в AS - озаботьтесь вниканием в принятые конвенции. Полезно будет.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 30.03.2011 в 00:45.
Старый 30.03.2011, 09:06
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
хм, а в плюсах суффиксом рекоммендуют подчеркивание в приватах писать..
Код:
class SomeClass {
    private:
        int length_;
}

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Прикольно, что акронимы в С++ рекомендуют писать прямо противоположно тому, что рекомендуется для кода в AS...

... однако мы с вами, ShadowsInRain, в ад вместе попадём. Я ведь тоже нарушитель(о_0) соглашения

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

Регистрация: Mar 2011
Сообщений: 35
Всё правильно, текстфилд я добавил чайлдом, а про его размеры забыл. Вот он и палится: 100 свой размер, + 8 отступ от угла. Как его укращать, я уже в курсе.
Странно, что Adobe сделали такой конкретный размер по-умолчанию и вырубили автосайз. Имхо, здравый смысл подсказывает, что по-умолчанию должен быть только автосайз.
Спасибо всем большое. :3

bav, я использую mouseChildren. Тем не менее, сообщение дошло до контейнера, иначе бы я не узнал о деффекте.

Оффтоп на счёт стилистики.
Во-первых, поля с m_ и так непубличные. Во-вторых, в некоторых конторах (Microsoft, Valve) есть мода использовать m_ для для любого "member". Такой стиль оченнь понравился. В какой-то ветке писали, что современные IDE с их плюшками должны избавить от проблем определения типа на глаз. Да вот, я вам скажу, что это нифига не работает, потому что среди месива из всех 100500 определений разобраться отнюдь не легко. А тут я ставлю m_, зову автодополнение, и сразу вижу список всех свойств / переменных. Ставлю f_, и вижу список непубличных функций. И ещё меня коробит писать первое слово в составном имени с нижнего регистра.

fish_r, мы попадём в ад только если наш код будет глючным и непонятным, или сломает кому-то мозг при рефакторинге. Стилистика не причём.)

Старый 30.03.2011, 15:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
ShadowsInRain, вместо m_ давно уже пользуют this.

Старый 30.03.2011, 19:04
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
И ещё меня коробит писать первое слово в составном имени с нижнего регистра.
но вы ведь пишите addEventListener, stageX и т.п.,
почему же тут коробит, а тут не коробит...
Я не против собственных конвенций, просто проблема в том, что конвенция должна быть одна.
А тут идёт смесь своей конвенции и конвенции базовых классов, а если вы ещё какую либу подключите (тоже со своим уставом)?
Просто я когда вижу такой код - заставляю переписывать ибо:
Цитата:
сломает кому-то мозг при рефакторинге
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 30.03.2011 в 19:07.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
AS3 , graphics , Sprite , баг , содержимое
Опции темы
Опции просмотра

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

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


 


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


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