Показать сообщение отдельно
Старый 01.04.2011, 15:08
psiworm вне форума Посмотреть профиль Отправить личное сообщение для psiworm Найти все сообщения от psiworm
  № 1  
Ответить с цитированием
psiworm
 
Аватар для psiworm

Регистрация: Jul 2005
Сообщений: 11
По умолчанию Почему может не работать Скроллинг?

написал отдельный класс, который генерирует текстовое поле со скроллом.
скрол элементы подгружаются из SWC.
входящие данные, XML и координаты.

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

Код AS3:
		private var TxtField:TextField = new TextField();
		private var TitleField:TextField = new TextField();
		private var FTitle:TextFormat = new TextFormat();
		private var FText:TextFormat = new TextFormat();
		private var data:XML;
		private var myFont1:Font = new presentum();
		private var PageField:MovieClip;
		private var myScroll:scroller;
		private var scrollX:uint;
		private var scrollY:uint;
		private var P:Number;
		private var scrollHeight:uint;
		private var rect1:Rectangle;
		private var scrollUp:ornament2;
		private var scrollDown:ornament2;
 
public function addPage(myXML:XML, num:uint=0, moveX:uint=0, moveY:uint=0, width:uint=50, height:uint=50, 
								color:Number=0x000000, titleShow:Boolean=false, titleSize:uint=18,	size:uint=10, 
								myNod:String="Page", gName:String="block"):MovieClip {
 
			PageField = new MovieClip();
			TitleField = new TextField();
			TxtField = new TextField();
 
			myScroll = new scroller();
			myScroll.scaleX = myScroll.scaleY = 0.5;
 
			data = myXML;
 
			//-----------------------------
			//Тут загружается текст в поле
			//-----------------------------
					FTitle.size = titleSize;
					FTitle.font = myFont1.fontName;
					FTitle.color = color;
					FTitle.align = TextAlign.LEFT;
					/////////////////////
					FText.size = size;
					FText.font = "Tahoma";
					FText.color = color;
					FText.align = TextAlign.LEFT;
					TitleField.x = moveX;
					TitleField.y = moveY;
					TitleField.width = width;
					TitleField.height = titleSize*1.5;
					TitleField.type = TextFieldType.DYNAMIC;
					TitleField.defaultTextFormat = FTitle;
					TitleField.embedFonts = true;
					/////////////////////////////
					TxtField.x = moveX;
					if (titleShow == false) {TxtField.y = moveY} else {TxtField.y = moveY+TitleField.height+20}
					TxtField.width = width;
					TxtField.height = height;
					TxtField.defaultTextFormat = FText;
					TxtField.wordWrap = true;
			//-----------------------------
			TitleField.htmlText = data.child(myNod).child(gName).@title[num];
			TxtField.htmlText = data.child(myNod).child(gName)[num];
 
			//-----------------------------
			//тут создается скролл
			//-----------------------------
 
			if (titleShow == true) {PageField.addChild(TitleField);}
			PageField.addChild(TxtField);
                                if (TxtField.height < TxtField.textHeight) {
				scrollX = moveX+TxtField.width+20;
 
				//trace(TxtField.height+" - "+TxtField.textHeight);
 
				PageField.graphics.lineStyle(1,0xcccc00);
				PageField.graphics.moveTo(scrollX,TxtField.y+7);
				PageField.graphics.lineTo(scrollX,TxtField.y+TxtField.height-7);
 
			//-----------------------------
			//а вот тут начинается проблема
			//-----------------------------
				scrollUp = new ornament2();
				PageField.addChild(scrollUp);
				scrollUp.x = scrollX;
				scrollUp.rotation = -90;
				scrollUp.y = TxtField.y-scrollUp.width/2;
				scrollUp.addEventListener(MouseEvent.CLICK, onUp);
				scrollUp.addEventListener(MouseEvent.MOUSE_OVER, onOver);
				scrollUp.addEventListener(MouseEvent.MOUSE_OUT, onOut);
 
				scrollDown = new ornament2();
				PageField.addChild(scrollDown);
				scrollDown.x = scrollX+1;
				scrollDown.rotation = 90;
				scrollDown.y = TxtField.y+TxtField.height+scrollDown.width/2;
				scrollDown.addEventListener(MouseEvent.CLICK, onDown);
				scrollDown.addEventListener(MouseEvent.MOUSE_OVER, onOver);
				scrollDown.addEventListener(MouseEvent.MOUSE_OUT, onOut);
 
				PageField.addChild(myScroll);
				myScroll.x = scrollX;
				scrollHeight = TxtField.height-myScroll.height;
				scrollY = TxtField.y+myScroll.height/2;
				myScroll.y = scrollY;
				TxtField.addEventListener(Event.SCROLL, onScroll);
			}
			rect1 = new Rectangle(myScroll.x, myScroll.y, 0, scrollHeight);
 
			return PageField;
                        }
 
		private function onOver(e:Event){
			Mouse.cursor = "button";
		}
		private function onOut(e:Event){
			Mouse.cursor = "arrow";
		}
 
		private function onUp(e:Event){
			if (TxtField.scrollV > 0) {TxtField.scrollV--};
			myScroll.y = Math.round(scrollY+(scrollHeight/TxtField.maxScrollV*TxtField.scrollV));
		}
		private function onDown(e:Event){
			if (TxtField.scrollV < TxtField.maxScrollV) {TxtField.scrollV++};
			myScroll.y = Math.round(scrollY+(scrollHeight/TxtField.maxScrollV*TxtField.scrollV));
		}
		private function onScroll(e:Event){
			myScroll.y = Math.round(scrollY+(scrollHeight/TxtField.maxScrollV*TxtField.scrollV));
		}
а инициирую так

Код AS3:
Page1.addChild(TxtBlock1.addPage(myXML,0,420,20,550,400,0xffffff,true,24,12));
Page2.addChild(TxtBlock2.addPage(myXML,1,420,20,550,450,0xffffff,true,24,12));
Добавлено через 1 час 1 минуту
блин.... нашел! прастите меня алигафрена...