Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Flash Dock menu

Macro [21.08.2010 17:30:19]

#

Tein erään video-oppaan perusteella tälläisen:

// Dock.fla
import Dock
import flash.events.Event;

var data:Array = new Array(
						   { id:1, img:"kuvat/kuva1.png" },
						   { id:1, img:"kuvat/kuva2.png" },
						   { id:1, img:"kuvat/kuva3.png" },
						   { id:1, img:"kuvat/kuva4.png" },
						   { id:1, img:"kuvat/kuva5.png" },
						   { id:1, img:"kuvat/kuva6.png" },
						   { id:1, img:"kuvat/kuva7.png" },
						   { id:1, img:"kuvat/kuva8.png" },
						   { id:1, img:"kuvat/kuva9.png" }
						   );

var dock:Dock = new Dock(data);
dock.addEventListener(Event.COMPLETE, dockCompleteHandler);
addChild(dock);

function dockCompleteHandler(event:Event) {
	trace("dockCompleteHandler");
	dock.removeEventListener(Event.COMPLETE, dockCompleteHandler);

	dock.x = stage.stageWidth*.5 - dock.width*.5;
	dock.y = stage.stageHeight - dock.height;
}
// Dock.as
package {
	import flash.events.Event;
	import flash.display.Sprite;
	import DockItem;
	import flash.geom.Point;


	public class Dock extends Sprite {

		private var _data:Array;
		private var _totalItems:int;
		private var _itemsLoader:int = 0;
		private var _minScale:Number = 0.45;
		private var _maxScale:Number = 1;
		private var _padding:Number = 15;
		private var _dockItems:Array = new Array();

		public function Dock( pData:Array = null) {
			trace("Dock::Dock()");
			_data = pData;

			addEventListener(Event.ADDED_TO_STAGE, _stageHandler);
		}

		//-----------------------------------
		// Getters & Setters
		//-----------------------------------

		public function get data():Array { return _data; trace("get data returnded " + _data); }
		public function set data(value:Array):void { _data = value; trace("set data setted _data = " + value); }

		//-----------------------------------
		// Event Handlers
		//-----------------------------------

		private function _enterFrameHandler(event:Event):void {
			trace("_enterFrameHandler");
			for(var i:int = 0; i < _dockItems.length; i++) {
				var item:DockItem = _dockItems[i];

				var scale:Number = _maxScale - _proximity( new Point(mouseX, mouseY), new Point(item.x, item.y)) / 100;
				if(scale < _maxScale && scale > _minScale) {
					item.scaleX = item.scaleY = scale;
				} else {
					item.scaleX = item.scaleY = _minScale;
				}
			}
		}
		private function _dockItemCompleteHandler(event:Event):void {
			trace("_dockItemCompleteHandler");
			event.target.removeEventListener(Event.COMPLETE, _dockItemCompleteHandler);

			_itemsLoader++;
			trace("_itemsLoader on nyt " + _itemsLoader);

			if(_itemsLoader == _totalItems) {
				trace("_itemsLoader == _totalItems");
				for(var i:int = 0; i < _dockItems.length; i++) {
					var item:DockItem = _dockItems[i];
					item.scaleX = item.scaleY = _minScale;
					var prevItem = (i > 0) ? _dockItems[i-1] : _dockItems[i];
					item.x = (x > 0) ? prevItem.x + prevItem.width + _padding : 0;

					item.visible = true;

					trace(i + " näkyvissä");
				}
				dispatchEvent(event);
			}
		}

		private function _stageHandler(event:Event):void {
			trace("_stageHandler");

			removeEventListener(Event.ADDED_TO_STAGE, _stageHandler);
			_initialize();
		}

		//-----------------------------------
		// Private & Protected Methods
		//-----------------------------------

		private function _proximity( pPointA:Point, pPointB:Point ) {
			trace("_proxmity");
			return Math.sqrt( (pPointA.x - pPointB.x)*(pPointA.x - pPointB.x) + (pPointA.y - pPointB.y)*(pPointA.y - pPointB.y) );
		}

		private function _initIcons():void {
			trace("_initIcons");
			_totalItems = _data.length;
			trace("_totalItems = _data.lenght = " + _totalItems)

			for(var i:int = 0; i < _totalItems; i++) {
				trace("for loop " + i)

				var id = _data[i].id;
				var img = _data[i].img;

				trace(id + " " + img)
				var item:DockItem = new DockItem(id, img);

				item.addEventListener(Event.COMPLETE, _dockItemCompleteHandler);
				item.visible = false;
				_dockItems.push(item);
				addChild(item);
			}
		}

		private function _initialize():void {
			trace("_initialize");
			_initIcons();

			addEventListener(Event.ENTER_FRAME, _enterFrameHandler);
		}
	}
}
// DockItem.as
package {
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.display.Sprite;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.display.LoaderInfo;
	import flash.display.Bitmap;

	public class DockItem extends Sprite {

		private var _id:int;
		private var _imageSource:String;

		public function DockItem( pId:int, pImageSource:String ) {
			trace("DockItem()");
			_id = pId;
			_imageSource = pImageSource;
			addEventListener(Event.ADDED_TO_STAGE, _stageHandler);

		}

		//-----------------------------------
		// Event Handlers
		//-----------------------------------

		private function _loaderCompleteHandler(event:Event):void {
			trace("_loaderCompleteHandler");

			var loader:LoaderInfo = event.target as LoaderInfo;

			loader.removeEventListener(Event.COMPLETE, _loaderCompleteHandler);
			loader.removeEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler);

			var iconContainer:Sprite = new Sprite();
			var icon:Bitmap = event.target.content as Bitmap;
			icon.smoothing = true;
			iconContainer.addChild(icon);
			iconContainer.x = - iconContainer.width*.5;
			iconContainer.y = - iconContainer.height*.5;
			addChild(iconContainer);
		}

		private function _ioErrorHandler(event:IOErrorEvent):void {
			trace("DockItem::_ioErrorHandler()");

			var loader:LoaderInfo = event.target as LoaderInfo;

			loader.removeEventListener(Event.COMPLETE, _loaderCompleteHandler);
			loader.removeEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler);
		}

		private function _stageHandler(event:Event):void {
			removeEventListener(Event.ADDED_TO_STAGE, _stageHandler);
			_initialize();
		}

		//-----------------------------------
		// Private & Protected Methods
		//-----------------------------------

		private function _loadIcons():void {
			trace("_loadIcons");
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _loaderCompleteHandler);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler);

			try {
				loader.load( new URLRequest(_imageSource) );
			} catch (e:Error) {
				trace(e.getStackTrace())
			}
		}

		private function _initialize():void {
			_loadIcons();
		}
	}
}

En ymmärrä mikä tätä vaivaa. Jostain syystä kuvat eivät tule näkyviin. Mitään virheitä ei tule. Osaisiko joku tuon perusteella sanoa, mikä on ongelmana?

Macro [21.08.2010 18:38:09]

#

Lisään vielä sen verran, että tuo on siis ActionScript 3:sta, ja Dock.fla on tietenkin se päätiedosto. Siellä on layerit Tausta ja A, joista Taustasta löytyy taustakuva (Tausta layer alimmaisena) ja A:sta löytyy koodi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta