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

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

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

Регистрация: Jul 2007
Сообщений: 44
По умолчанию Проблема с драгом и заливкой

Есть у меня такой класс:
Код:
class DraggableMovieClip extends MovieClip
{
	private var left:Number;
	private var top:Number;
	private var right:Number;
	private var bottom:Number;
	private var dest:MovieClip;
	
	public function DraggableMovieClip()
	{
		super();
		this.left = undefined;
		this.top = undefined;
		this.right = undefined;
		this.bottom = undefined;
		this.dest = this;
		this.onPress = __startDrag;
		this.onMouseUp = __stopDrag;
		this.onRelease = __stopDrag;
		this.onMouseMove = updateAfterEvent;
	}
	
	public function setDragBoundaries(newleft:Number,newtop:Number,newright:Number,newbottom:Number):Void
	{
		this.left = newleft;
		this.top = newtop;
		this.right = newright;
		this.bottom = newbottom;
	}
	
	public function setDestinationClip(newdest:MovieClip):Void
	{
		this.dest = newdest;
	}

	public function getDestinationClip():MovieClip
	{
		return this.dest;
	}
	
	public function doDrag():Void
	{
		this.dest.startDrag(false,this.left,this.top,this.right,this.bottom);
	}
	
	public function getPositionX():Number
	{
		return((2*this.dest._x-this.right-this.left)/(this.right-this.left));
	}
	
	public function setPositionX(newX:Number):Void
	{
		if( newX >= 1 )
		{
			this.dest._x = this.right;
		}
		else if( newX <= -1 )
		{
			this.dest._x = this.left;
		}
		else
		{
			this.dest._x = 0.5*(this.left+this.right) + newX*0.5*(this.right-this.left);
		}
	}
	
	public function getPositionY():Number
	{
		return((2*this.dest._y-this.top-this.bottom)/(this.bottom-this.top));
	}
	
	public function setPositionY(newY:Number):Void
	{
		if( newY >= 1 )
		{
			this.dest._x = this.bottom;
		}
		else if( newY <= -1 )
		{
			this.dest._x = this.top;
		}
		else
		{
			this.dest._x = 0.5*(this.top+this.bottom) + newY*0.5*(this.bottom-this.top);
		}
	}
	
	private function __startDrag():Void
	{
		this.dest.startDrag(false,this.left,this.top,this.right,this.bottom);
	}
	
	private function __stopDrag():Void
	{
		this.dest.stopDrag();
	}
}
И есть у меня вот такой код в Action окошке рабочего поля первого кадра:
Код:
_root.createEmptyMovieClip("Ruler",_root.getNextHighestDepth());
_root.Ruler.attachMovie("EmptyDraggableMovieClipSymbol","DragPane",_root["Ruler"].getNextHighestDepth());

var mywidth:Number = 13000;
var __start:Number = -500;
var __end:Number = 2100;
var len:Number = __end - __start;

_root.Ruler.DragPane.setDestinationClip(_root.Ruler);
_root.Ruler.DragPane.setDragBoundaries(-0.5*mywidth,0,0.5*mywidth,0);

for( var i=__start ; i<__end ; i++ )
{
	var j=(i<0)?(i):(i+1);		// biologists forgot about ZERO
	if( j%100 == 0 )
	{
		_root.Ruler.lineStyle(1,0x990000,100);
		_root.Ruler.moveTo(-0.5*((len-1)*mywidth/len)+(i-__start)*(mywidth/len),100);
		_root.Ruler.lineTo(-0.5*((len-1)*mywidth/len)+(i-__start)*(mywidth/len),80);
		_root.Ruler.moveTo(-0.5*((len-1)*mywidth/len)+(i-__start)*(mywidth/len),-80);
		_root.Ruler.lineTo(-0.5*((len-1)*mywidth/len)+(i-__start)*(mywidth/len),-100);
		_root.Ruler.lineStyle(0,0x990000,25);
	}
	else if( j%10 == 0 )
	{
		_root.Ruler.moveTo(-0.5*((len-1)*mywidth/len)+(i-this.__start)*(mywidth/len),90);
		_root.Ruler.lineTo(-0.5*((len-1)*mywidth/len)+(i-this.__start)*(mywidth/len),100);
		_root.Ruler.moveTo(-0.5*((len-1)*mywidth/len)+(i-this.__start)*(mywidth/len),-90);
		_root.Ruler.lineTo(-0.5*((len-1)*mywidth/len)+(i-this.__start)*(mywidth/len),-100);
	}
}
_root.Ruler.DragPane.moveTo(0,0);
_root.Ruler.DragPane.beginFill(0x006600,50);
_root.Ruler.DragPane.lineTo(-0.5*mywidth,-100);
_root.Ruler.DragPane.lineTo(0.5*mywidth,-100);
_root.Ruler.DragPane.lineTo(0.5*mywidth,100);
_root.Ruler.DragPane.lineTo(-0.5*mywidth,100);
_root.Ruler.DragPane.lineTo(-0.5*mywidth,-100);
_root.Ruler.DragPane.endFill();
"EmptyDraggableMovieClipSymbol" - пустой MovieClip в библиотеке, для которого стоит export for ActionScript галочка, и указан клас DraggableMovieClip;

Что хочу получить: линейку, которая драгается.

Что получается: примерно то, что хочу, только зелёная заливка исчезает при достижении опр. положения линейки. притом заливка не кончается, а именно исчезает. Линейку после этого даже не схватить.

Что делать? Где искать проблему?

В заливке? В коде?

Старый 07.08.2007, 14:13
romantique вне форума Посмотреть профиль Отправить личное сообщение для romantique Найти все сообщения от romantique
  № 2  
Ответить с цитированием
romantique

Регистрация: Jul 2007
Сообщений: 44
Кстати проблема изчезает, когда длина линейки меньше, скажем в 10 раз. Почему то заливка при драге загибается, если рисовать огромный прямоугольник, а потом его драгать.

Как с этим бороться???

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

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

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


 


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


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