Показать сообщение отдельно
Старый 23.02.2015, 12:44
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вот как-то делал классик, не пинайте, 2011 год..
Код AS3:
package  
{
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Graphics;
	import flash.display.IBitmapDrawable;
	import flash.display.Sprite;
	import flash.geom.Matrix;
 
/* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */ 
	public class TiledBackground extends Sprite
	{
		private var _tile		:BitmapData;
		private var _offsetX	:Number;
		private var _offsetY	:Number;
		private var _tileAngle	:Number;
		private var _areaW		:Number;
		private var _areaH		:Number;
		private var _matrix		:Matrix;
		private var _smooth		:Boolean;
		private var _graphics	:Graphics;
 
		public function TiledBackground(areaWidth:Number, areaHeight:Number, tile:IBitmapDrawable, offsetX:Number = 0, offsetY:Number = 0, tileAngle:Number = 0, smooth:Boolean = true) 
		{
			_offsetX = offsetX;
			_offsetY = offsetY;
			_tileAngle = tileAngle * Math.PI / 180;
			_smooth = smooth;
			_areaW = areaWidth;
			_areaH = areaHeight;
			_graphics = this.graphics;
			if (tile is BitmapData)
			{
				_tile = (tile as BitmapData).clone();
			}
			else
			{
				var t:DisplayObject = tile as DisplayObject;
				_tile = new BitmapData(t.width, t.height);
				_tile.draw(tile);
			}
			_matrix = new Matrix();
			fill();
		}
 
		private function fill():void
		{
			_matrix.identity();
			_matrix.rotate(_tileAngle);
			_matrix.tx = _offsetX;
			_matrix.ty = _offsetY;
			_graphics.clear();
			_graphics.beginBitmapFill(_tile, _matrix, true, _smooth);
			_graphics.drawRect(0, 0, _areaW, _areaH);
		}
 
		public function get offsetX():Number 
		{
			return _offsetX;
		}
 
		public function set offsetX(value:Number):void 
		{
			if (_offsetX != value) 
			{
				_offsetX = value;
				fill();
			}
		}
 
		public function get offsetY():Number
		{
			return _offsetY;
		}
 
		public function set offsetY(value:Number):void 
		{
			if (_offsetY != value) 
			{
				_offsetY = value;
				fill();
			}
		}
 
		public function get smooth():Boolean 
		{
			return _smooth;
		}
 
		public function set smooth(value:Boolean):void 
		{
			_smooth = value;
			fill();
		}
 
		public function get tileAngle():Number 
		{
			return _tileAngle;
		}
 
		public function set tileAngle(value:Number):void 
		{
			_tileAngle = value;
			fill();
		}
	}
}
Тестовый Main:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
/* * * * * * * * * *
*                  *
*  @author wolsh   *
*                  *
\* * * * * * * * * */
	public class Main extends Sprite 
	{
		private var _ts:TiledBackground;
		[Embed(source='../lib/Drop_by_Drop_by_youngmoons___2.jpg')]
		private var _img:Class;
		private var _timer:Timer;
		private var _top:Sprite;
		private var _bottom:Sprite;
		private var _left:Sprite;
		private var _right:Sprite;
		private var _dirX: int = 0;
		private var _dirY: int = 0;
		private var _speed:int = 1;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.align = StageAlign.TOP_LEFT;
       stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.showDefaultContextMenu = false;
			// entry point
			_ts = new TiledBackground(500, 500, new _img(), 0, 0, 45, true);
			addChild(_ts);
			_ts.x = 100, _ts.y = 100;
			// кнопки управления
			_top = scrollButton(_ts.width, 30);
			_bottom = scrollButton(_ts.width, 30);
			_left = scrollButton(30, _ts.height);
			_right = scrollButton(30, _ts.height);
			addChild(_top);
			addChild(_bottom);
			addChild(_left);
			addChild(_right);
			_top.x = 100, _top.y = 65;
			_bottom.x = 100, _bottom.y = _ts.height + 105;
			_left.x = 65, _left.y = 100;
			_right.x = _ts.width + 105, _right.y = 100;
			_top	.addEventListener(MouseEvent.ROLL_OVER, overHandler);
			_bottom.addEventListener(MouseEvent.ROLL_OVER, overHandler);
			_left.addEventListener(MouseEvent.ROLL_OVER, overHandler);
			_right.addEventListener(MouseEvent.ROLL_OVER, overHandler);
			_top.addEventListener(MouseEvent.ROLL_OUT, outHandler);
			_bottom.addEventListener(MouseEvent.ROLL_OUT, outHandler);
			_left.addEventListener(MouseEvent.ROLL_OUT, outHandler);
			_right.addEventListener(MouseEvent.ROLL_OUT, outHandler);
			// таймер "движения"
			_timer = new Timer(12);
		}
 
		private function outHandler(event:MouseEvent):void 
		{
			_timer.removeEventListener(TimerEvent.TIMER, enterFrameHandler);
			_timer.stop();
		}
 
		private function overHandler(event:MouseEvent):void 
		{
			var targ:Sprite = event.currentTarget as Sprite;
			switch(targ)
			{
				case _top : _dirX = 0; _dirY = _speed;
				break;
				case _bottom : _dirX = 0; _dirY = -_speed;
				break;
				case _left : _dirX = _speed; _dirY = 0;
				break;
				case _right : _dirX = -_speed; _dirY = 0;
				break;
			}
			_timer.addEventListener(TimerEvent.TIMER, enterFrameHandler);
			_timer.start();
		}
 
		private function enterFrameHandler(event:TimerEvent):void 
		{
			_ts.offsetX += _dirX;
			_ts.offsetY += _dirY;
			//_ts.tileAngle += 0.005;// тест поворота
			event.updateAfterEvent();
		}
 
		private function scrollButton(width:Number, height:Number):Sprite
		{
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0xDDDDDD);
			s.graphics.drawRect(0, 0, width, height);
			return s;
		}
	}
 
}
Во флэшке ниже — наводить мышку на серые полоски вокруг картинки
TileScroll.swf   (28.9 Кб)
Вложения
Тип файла: zip TileScroll - FD 2011 Project.zip (57.7 Кб, 59 просмотров)
Тип файла: swf TileScroll.swf (28.9 Кб, 291 просмотров)
__________________
Reality.getBounds(this);