`
kinglong
  • 浏览: 32982 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

ArtDigit 艺术数字类

阅读更多
此类主要用于使用动画元件来显示对应的数字,并支持数字缓冲滚动显示功能!并有比较成熟的资源数字样式显示管理功能

package game.assist.view {
	import com.greensock.TweenMax;

	import flash.display.MovieClip;

	import game.net.File;
	import game.collection.HashMap;

	import flash.display.Sprite;

	/**
	 * ArtDigit 艺术数字
	 * @author Kinglong
	 * @since 2012-7-26
	 */
	public class ArtDigit extends Sprite {
		/**
		 * 资源路径
		 */
		public static var resourcePath : String = "";
		/**
		 * 资源列表
		 */
		private static const resourceMap : HashMap = new HashMap();
		/**
		 * 回调列表
		 */
		private static const callbackList : Vector.<Function> = new Vector.<Function>();

		/**
		 * 字符转成帧号
		 * @param chat 字符
		 */
		private static function charToFrame(chat : String) : int {
			switch(chat) {
				case "-":
					return 11;
				case "+":
					return 12;
			}
			return int(chat) + 1;
		}

		/**
		 * 改变回调
		 */
		public var onChange : Function = new Function();
		/**
		 * 是否初始化
		 */
		private var _inited : Boolean;
		/**
		 * 资源是否加载
		 */
		private var _loaded : Boolean;
		/**
		 * 数字样式
		 */
		private var _style : String;
		/**
		 * 数值
		 */
		private var _value : int;
		/**
		 * 数值字符
		 */
		private var _chars : String;
		/**
		 * 加号是否显示
		 */
		private var _addSymbolVisible : Boolean;
		/**
		 * 数字列表
		 */
		private var _numberList : Array;
		/**
		 * 间隔
		 */
		private var _spacing : int;
		/**
		 * 样式类
		 */
		private var _styleClass : Class;
		/**
		 * 缓冲对象
		 */
		private var _vo : TweenVO;

		/**
		 * 构造
		 * @param style 样式
		 */
		public function ArtDigit(style : String = null) {
			_inited = false;
			_loaded = false;
			if (style) {
				init(style);
			}
			_value = 0;
			_spacing = 2;
			_chars = "";
			_numberList = [];

			_vo = new TweenVO();

			_addSymbolVisible = false;

			mouseChildren = false;
			mouseEnabled = false;
		}

		/**
		 * 初始化
		 * @param style 样式
		 */
		public function init(style : String) : void {
			if (inited) {
				return;
			}
			_style = style;
			if (!resourceMap.containsKey(style)) {
				loadStyle();
			} else if (resourceMap.get(style) is File) {
				callbackList.push(updateStyle);
			} else {
				updateStyle();
			}
			_inited = true;
		}

		/**
		 * 加载样式
		 */
		private function loadStyle() : void {
			var url : String = resourcePath + style + ".swf";
			var file : File = new File();
			resourceMap.put(style, file);
			callbackList.push(updateStyle);
			file.onComplete = function() : void {
				resourceMap.put(style, file.getClassByName("Style"));
				for each (var func:Function in callbackList) {
					if (func != null) {
						func();
					}
				}
				callbackList.length = 0;
			};
			file.load(url);
		}

		/**
		 * 更新样式
		 */
		private function updateStyle() : void {
			_styleClass = resourceMap.get(style);
			_loaded = true;
			this.value = value;
		}

		/**
		 * 加号是否显示
		 */
		public function set addSymbolVisible(value : Boolean) : void {
			_addSymbolVisible = value;
			render(this.value);
		}

		/**
		 * 数值
		 */
		public function set value(num : int) : void {
			_value = num;
			TweenMax.killTweensOf(_vo);
			_vo.value = num;
			render(num);
		}

		public function get value() : int {
			return _value;
		}

		/**
		 * 缓动到指定数值
		 * @param num 指定数值
		 */
		public function tweenTo(num : int) : void {
			if (!loaded) {
				value = num;
				return;
			}
			TweenMax.to(_vo, 0.8, {value:num, onUpdate:tweenUpdateHandler});
		}

		/**
		 * 缓动更新处理
		 */
		private function tweenUpdateHandler() : void {
			render(_vo.value);
		}

		/**
		 * 数字间隔
		 */
		public function set spacing(value : int) : void {
			if (_spacing == value) {
				return;
			}
			_spacing = value;
			_chars = "";
			render(value);
		}

		public function get spacing() : int {
			return _spacing;
		}

		/**
		 * 渲染
		 * @param num 数值
		 */
		private function render(num : int) : void {
			if (!loaded) {
				return;
			}
			var str : String = new String(num);
			if (num > 0 && _addSymbolVisible) {
				str = "+" + str;
			}
			if (_chars == str) {
				return;
			}
			_chars = str;
			renderStyle();
			onChange();
		}

		/**
		 * 渲染数字样式
		 */
		private function renderStyle() : void {
			var i : int;
			var mc : MovieClip;
			var len : int = Math.max(_numberList.length, _chars.length);
			var dx : int = 0;
			for (i = 0; i < len; i++) {
				if (i >= _numberList.length) {
					mc = new _styleClass();
					mc.stop();
					_numberList.push(mc);
				}
				if (i < _chars.length) {
					mc = _numberList[i];
					if (!contains(mc)) {
						addChild(mc);
					}
					mc.gotoAndStop(charToFrame(_chars.charAt(i)));
					mc.y = 0;
					mc.x = dx;
					dx += mc.width + spacing;
				}
				if (i >= _chars.length) {
					mc = _numberList[i];
					if (contains(mc)) {
						removeChild(mc);
					}
				}
			}
			if (_numberList.length > _chars.length) {
			} else if (_numberList.length < _chars.length) {
				for (i = _numberList.length; i < _chars.length; i++) {
					mc = new _styleClass();
					mc.stop();
					addChild(mc);
					_numberList.push(mc);
				}
			}
		}

		/**
		 * 当前样式
		 */
		public function get style() : String {
			return _style;
		}

		/**
		 * 是否初始化
		 */
		public function get inited() : Boolean {
			return _inited;
		}

		/**
		 * 样式是否加载
		 */
		public function get loaded() : Boolean {
			return _inited && _loaded;
		}

		/**
		 * 移动
		 */
		public function move(x : int, y : int) : void {
			this.x = x;
			this.y = y;
		}

		/**
		 * 销毁
		 */
		public function dispose() : void {
			TweenMax.killTweensOf(_vo);
			for each (var mc : MovieClip in _numberList) {
				mc.stop();
				if (contains(mc)) {
					removeChild(mc);
				}
			}
			_numberList = null;
			var index : int = callbackList.indexOf(updateStyle);
			if (index != -1) {
				callbackList.splice(index, 1);
			}
		}
	}
}
class TweenVO {
	public var value : int = 0;
}

分享到:
评论
2 楼 myjave 2012-09-29  
哦 是我搞错了
这个怎么使用
1 楼 myjave 2012-09-29  
这个类拷贝靠flash里报错

相关推荐

    数字媒体艺术概论.pdf

    《数字媒体艺术概论》一书探讨了在20世纪90年代以来,随着电脑普及和网络技术的快速发展,数字媒体艺术如何成为一个新兴且重要的艺术形式。数字媒体艺术的出现,打破了传统艺术创作的边界,艺术家们不再局限于传统的...

    硬件架构的艺术 数字电路的设计方法与技术

    硬件架构的艺术 数字电路的设计方法与技术 [(印)阿罗拉著]

    数字媒体艺术考试试题4套.docx

    【数字媒体艺术考试知识点】 数字媒体艺术是一门融合了艺术、技术与创新的综合性学科,主要涉及数字技术在视觉艺术中的应用。以下是一些在数字媒体艺术考试中可能遇到的知识点: 1. **创意表达**:无论是故事编讲...

    多类SVM在图像艺术属性分类中的应用研究

    关键词“支持向量机”、“二叉树多类分类算法”和“图像艺术属性”贯穿了整个研究过程,指导了研究的方向和方法,突出了研究的核心内容。中图分类号TP391、文献标识码A以及文章编号***(2009)***均为本研究文献的重要...

    数字媒体艺术基本概念.pdf

    数字媒体艺术是一种结合了数字技术和艺术表达的新型艺术形式,它在21世纪的快速发展中已经深深地改变了艺术创作的面貌。这个领域不仅涉及到视觉艺术,如动漫设计,还涵盖了音乐、电影、交互设计等多个方面。数字媒体...

    数字媒体艺术概论教案 (2).pdf

    数字媒体艺术是一门新兴的艺术门类,它在传统艺术的基础上融入了数字化技术,成为一种时代发展的标志。随着计算机技术、互联网技术和多媒体技术的迅猛发展,数字媒体艺术以崭新的面貌和表现形式,为艺术创作带来了...

    数字媒体艺术

    数字媒体艺术作为当今时代最具创新精神和前瞻性的专业领域之一,正以迅猛的发展态势改变着我们接收信息和娱乐的方式。它不仅仅是一种新的艺术表现形式,更是一种集合了高科技与创意设计思维的全新领域,这一领域的...

    硬件架构的艺术 数字电路的设计方法与技术.pdf

    该文档介绍FPGA相关知识,包括时序分析基础知识,值得一看

    NFT数字交易艺术数字藏品系统+源宇宙区块链nft

    在当今的数字时代,NFT数字交易艺术数字藏品系统正逐渐成为热门话题,它结合了区块链技术和虚拟现实技术,为艺术作品的创作、交易、收藏带来了全新的模式。NFT,全称Non-Fungible Token(非同质化代币),是区块链...

    数字艺术与文化创意产业(2015)

    《数字媒体艺术概论》课程第五章 数字艺术与文化创意产业(2015) 课程PPT 《数字媒体艺术概论》课程第五章 数字艺术与文化创意产业(2015) 课程PPT 《数字媒体艺术概论》课程第五章 数字艺术与文化创意产业(2015) ...

    数字艺术类开放课程建设信息化技术策略研究.docx

    【摘要】:本文探讨了数字艺术类开放课程建设中信息化技术的应用策略,旨在为相关专业课程改革提供指导。文章从改革策略、实施措施和教学成效三个方面分析了信息化技术在数字艺术教学中的作用,并以《游戏原画设计》...

    数字艺术类专业人才供需数据获取和分析研究 文章所用数据集

    随着数字技术的不断发展,数字艺术作品逐渐成为市场上的热门商品,相应的,对于数字艺术类专业人才的需求也在不断增长。为了更准确地了解这一领域的人才供需状况,进行数据获取和分析研究显得尤为重要。 文章所使用...

    重构美学-数字媒体艺术本性

    《重构美学:数字媒体艺术本性》数字媒体艺术美学是一个全新的美学研究领域,它具有我们时代的鲜明特征,又同时包蕴着源远流长的艺术传统和美学传统,作为国家教育部“十五”规划的“211二期工程”科研项目,一方面...

    数字艺术对文化艺术传承的影响 心得体会 .docx

    数字艺术是21世纪文化艺术领域的一大创新,它以高速发展的科技为支撑,借助数字技术、信息技术,改变了传统艺术的创作方式和审美体验。数字艺术不仅为艺术家提供了全新的表现空间,还对文化艺术的传承产生了深远影响...

    数字艺术品铸造交易平台NFT交易商城类鲸探类唯艺术.txt

    数字艺术品铸造交易平台NFT交易商城类鲸探类唯艺术

    数字艺术设计.pdf

    在21世纪的知识经济时代,数字艺术设计已成为核心产业之一。它突破了传统艺术形式的界限,将艺术设计与计算机技术紧密结合,开辟了全新的艺术表达渠道。数字艺术设计不仅包含数字绘画、平面设计、出版物设计等传统...

    数字艺术设计.docx

    随着数字时代的到来,数字艺术设计已然成为21世纪知识经济的重要推动力。这一领域将艺术创新与计算机技术紧密结合,颠覆了传统艺术设计的框架和表现形式。数字艺术设计的范畴包罗万象,从数字绘画到平面设计,再到...

    人工智能和数字媒体艺术实践的关系及发展现状.pdf

    随着人工智能技术的发展,其在数字媒体艺术实践中的应用越来越广泛,其关系也日益密切。人工智能技术不仅在图像识别、语音识别、艺术创作等传统领域取得了显著进展,还在其他方面展现出了商业化潜力。以下是关于人工...

    数字媒体艺术概论期末范围整理

    数字媒体艺术概论期末范围整理 数字媒体艺术概论是指基于计算机语言和数字媒介的一门新型艺术形式,是科学、艺术和媒体相互交叉领域和实践型应用学科。它包括媒体的定义、媒体类型、传统媒体和新媒体的分类、数字...

Global site tag (gtag.js) - Google Analytics