Показать сообщение отдельно
Старый 21.12.2005, 16:26
Andromed вне форума Посмотреть профиль Отправить личное сообщение для Andromed Найти все сообщения от Andromed
  № 51  
Ответить с цитированием
Andromed

Регистрация: Aug 2005
Сообщений: 83
Ну и наверно последнее.. чтото больше нетпридумывается вроде почти все новое расмотрели из интересного.
и так Scale9Grid позволяет ресайзить картинку не изменяя ее границ.. очень полезно для кнопок и прочего, обратите внимание что scale9 можно включать прямо в бибилиотекте объекта (не програмно), для этого нужно зайти в propertis объекта и снизу поставить галочку Enable Guides for 9-slice scaling, сразу в нутри мувика появятся 4 линии и сетка, с помощью которых можно выстовить границы, програмно же все сводится к тому чтобы задать прямоуголник и присвоить его параметру 9scale

var grid:flash.geom.Rectangle = new flash.geom.Rectangle(x,y, width, height);
MC.scale9Grid = grid;

и так пример
http://www.vipsauna.com/test/Scale9.html
исходник
http://www.vipsauna.com/test/Scale9.fla

код без комментов , так как основа кода это раскрашивание и обработка событий, сам скале только в 2 строчках, да кстати если внутри мувиклипа у вас есть др мувики и вы применили scale9Grid, то внутренние мувики будут отображаться некорректно, это есть небольшой минус

Код:
import flash.geom.*;
Stage.scaleMode = 'noScale';
this.createEmptyMovieClip("Nitka", 1);
vintik.swapDepths(Nitka);
var Shadow = new flash.filters.DropShadowFilter(10, 30, 0x000000, 10, 50, 50, 1, 2, false, false, false);
pic.filters = [Shadow];
Nitka.filters = [Shadow];
var manipulate = new flash.geom.Point(0, 0);
var old_mouse;
var new_mouse;
var border = 10;
var left = -pic._width/2+border;
var top = -pic._height/2+border;
var right = pic._width/2-border;
var buttom = pic._height/2-border;
var grid:Rectangle = new Rectangle(left, top, right-left, buttom-top);
pic.scale9Grid = grid;
var fly = true;
var center = new flash.geom.Point(150, 150);
var gradient_matrix:Matrix = new Matrix();
gradient_matrix.createGradientBox(30, 30, 0, 0, 0);
onEnterFrame = function () {
	gradient_matrix.rotate(0.03);
	gradient_matrix.translate(5, 0);
	pic.clear();
	pic.beginGradientFill("radial", [0x000000, 0xFF6600], [100, 100], [0, 0xFF], gradient_matrix, "reflect", "linearRGB", 0.5);
	pic.moveTo(left, top);
	pic.lineTo(right, top);
	pic.lineTo(right, buttom);
	pic.lineTo(left, buttom);
	pic.lineTo(left, top);
	pic.endFill();
	Nitka.clear();
	Nitka.lineStyle(1, 0xffFFff, 50, true, "none", "round", "miter", 1);
	Nitka.moveTo(pic._x-pic._width/2, pic._y-pic._height/2);
	Nitka.lineTo(vintik._x, vintik._y);
	Nitka.lineTo(pic._x+pic._width/2, pic._y-pic._height/2);
	if (fly) {
		var point = new flash.geom.Point(pic._x, pic._y);
		var distance = Point.distance(point, center);
		var angle = Math.atan2(point.x-center.x, point.y-center.y);
		pic._x -= distance*Math.sin(angle)/7;
		pic._y -= distance*Math.cos(angle)/7;
		if (distance<2) {
			fly = false;
		}
	}
};
pic.onPress = function() {
	fly = false;
	var bounds = this.getBounds(this._parent);
	trace(bounds);
	if (_xmouse<bounds.xMin+border) {
		manipulate.x = -1;
	} else if (_xmouse>bounds.xMax-border) {
		manipulate.x = 1;
	} else {
		manipulate.x = 0;
	}
	if (_ymouse<bounds.yMin+border) {
		manipulate.y = -1;
	} else if (_ymouse>bounds.yMax-border) {
		manipulate.y = 1;
	} else {
		manipulate.y = 0;
	}
	trace(manipulate);
	old_mouse = new flash.geom.Point(_xmouse, _ymouse);
	this.onMouseMove = scalePictureMouseMove;
};
pic.onRelease = pic.onReleaseOutside=function () {
	fly = true;
	delete this.onMouseMove;
};
function scalePictureMouseMove() {
	new_mouse = new flash.geom.Point(_xmouse, _ymouse);
	var diff_mouse = new_mouse.subtract(old_mouse);
	this._width += manipulate.x*diff_mouse.x;
	this._height += manipulate.y*diff_mouse.y;
	var isDragging = Boolean(manipulate.x == 0 && manipulate.y == 0);
	if (manipulate.x<0 || isDragging) {
		this._x += diff_mouse.x;
	}
	if (manipulate.y<0 || isDragging) {
		this._y += diff_mouse.y;
	}
	old_mouse = new_mouse;
}