ActionScript3 Cookbook中摘取(三)

本文介绍了ActionScript中的哈希表使用方法,包括创建、访问和遍历等操作;详细讲解了如何创建自定义按钮类,实现鼠标交互效果;并探讨了如何利用Loader加载资源及显示加载进度。

1、哈希表(ActionScript中叫关联数组)

在ActionScript中是Object的一个实例,

一、创建:

var memebers:Object = {scribe: "Franklin",
chairperson: "Gina",
treasurer: "Sindhu"};

var members:Object = new Object( );
members.scribe = "Franklin";
members.chairperson = "Gina";
members.treasurer = "Sindhu";

二、访问:

trace(members.scribe);

trace(members["scribe"]);

三、读取,使用for...in

// 显示:
// treasurer: Sindhu
// chairperson: Gina
// scribe: Franklin

for (var sRole:String in members) {
    trace(sRole + ": " + members[sRole]);
}

========================================================================

 

2、几种常用可视化类应继承的父类说明

如果创建一个图形类,这就要继承Shape类。

如果要创建自定义按钮,可能要继承SimpleButton类。

如果要创建一个容纳其他对象的容器,Sprite 就是个很好的继承类,它不需要使用时间线。

如果需要时间线,需要继承MovieClip

========================================================================

 

3、创建鼠标移动至按钮上时的浮动按钮

思路:

一、创建类继承自SimpleButton,定义按钮的四种状态upState、overState、downState、hitTestState

四种状态意义:

upState:鼠标移开时

overState:鼠标移到按钮上时

downState:鼠标按下时

hitTestState:鼠标移动按钮时的可反应区域

二、创建TextField,用来显示按钮上的文字。

三、在创建TextField这个方法中,如果为按下状态时,此TextField的X和Y座标分别 +1。

代码:

public class RectangleButton extends SimpleButton {
	// 显示在按钮上的文本
	private var _text:String;
	// 保存矩形的宽度和高度
	private var _width:Number;
	private var _height:Number;
	public function RectangleButton( text:String, width:Number, height:Number ) {
		// Save the values to use them to create the button states
		_text = text;
		_width = width;
		_height = height;
		// 创建按钮状态
		upState = createUpState( );
		overState = createOverState( );
		downState = createDownState( );
		hitTestState = upState;
	}
		// 创建状态对象
	private function createUpState( ):Sprite {
		var sprite:Sprite = new Sprite( );
		var background:Shape = createdColoredRectangle( 0x33FF66 );
		var textField:TextField = createTextField( false );
		sprite.addChild( background );
		sprite.addChild( textField );
		return sprite;
	}
	private function createOverState( ):Sprite {
		var sprite:Sprite = new Sprite( );
		var background:Shape = createdColoredRectangle( 0x70FF94 );
		var textField:TextField = createTextField( false );
		sprite.addChild( background );
		sprite.addChild( textField );
		return sprite;
	}
	private function createDownState( ):Sprite {
		var sprite:Sprite = new Sprite( );
		var background:Shape = createdColoredRectangle( 0xCCCCCC );
		var textField:TextField = createTextField( true );
		sprite.addChild( background );
		sprite.addChild( textField );
		return sprite;
	}
	private function createdColoredRectangle( color:uint ):Shape {
		var rect:Shape = new Shape( );
		rect.graphics.lineStyle( 1, 0x000000 );
		rect.graphics.beginFill( color );
		rect.graphics.drawRoundRect( 0, 0, _width, _height, 15 );
		rect.graphics.endFill( );
		rect.filters = [ new DropShadowFilter( 2 ) ];
		return rect;
	}
		// 创建按钮上的文字
	private function createTextField( downState:Boolean ):TextField {
		var textField:TextField = new TextField( );
		textField.text = _text;
		textField.width = _width;
		var format:TextFormat = new TextFormat( );
		format.align = TextFormatAlign.CENTER;
		textField.setTextFormat( format );
		//垂直居中
		textField.y = ( _height - textField.textHeight ) / 2;
		textField.y -= 2; // Subtract 2 pixels to adjust for offset
		if ( downState ) {
			textField.x += 1;
			textField.y += 1;
		}
	}
}


//调用按钮类
package {
	import flash.display.*;
	public class SimpleButtonDemo extends Sprite {
		public function SimpleButtonDemo( ) {
			// 创建三个不同文字不同大小和位置的矩形按钮
			var button1:RectangleButton = new RectangleButton( "Button 1", 60, 100 );
			button1.x = 20;
			button1.y = 20;
			var button2:RectangleButton = new RectangleButton( "Button 2", 80, 30 );
			button2.x = 90;
			button2.y = 20;
			var button3:RectangleButton = new RectangleButton( "Button 3", 100, 40 );
			button3.x = 100;
			button3.y = 60;
			addChild( button1 );
			addChild( button2 );
			addChild( button3 );
		}
	}
}

========================================================================

 

4、Loader实例的contentLoaderInfo的事件说明:

open
当资源开始下载时触发
progress
资源在下载中时触发
complete
当资源下载完成时触发
init
当载入外部的.swf初始化时触发
httpStatus
当载入外部资源的HTTP请求产生状态代码错误时触发
ioError
当一个错误导致下载被终止时触发,比如找不到相应资源
securityError
当试图读取安全沙漏以外的数据时触发
unload
当unload( ) 方法被调用或移除载入的内容时或再次调用load( ) 方法时都会触发该事件

========================================================================

 

5、利loader的事件显示加载对象时的百分比

private function handleOpen( event:Event ):void {
	_loaderStatus = new TextField( );
	addChild( loaderStatus );
	_loaderStatus.text = "Loading: 0%";
}
private function handleProgress( event:ProgressEvent ):void {
	var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
	_loaderStatus.text = "Loading: " + percent + "%";
}
private function handleComplete( event:Event ):void {
	removeChild(_loaderStatus);
	_loaderStatus = null;
}

========================================================================

 

 6、装载SWF,并调用此SWF中的方法

使用Loader,监听Init事件,并通过loader.content访问装载SWF中的方法

如:

private function handleInit( event:Event ):void {
 var movie:* = _loader.content;

//可以调用装载swf的方法了
 trace( movie.getColor( ) );
 movie.setColor( 0xFF0000 );
}

========================================================================

 

混合动力汽车(HEV)模型的Simscape模型(Matlab代码、Simulink仿真实现)内容概要:本文档介绍了一个混合动力汽车(HEV)的Simscape模型,该模型通过Matlab代码和Simulink仿真工具实现,旨在对混合动力汽车的动力系统进行建模与仿真分析。模型涵盖了发动机、电机、电池、传动系统等关键部件,能够模拟车辆在不同工况下的能量流动与控制策略,适用于动力系统设计、能耗优化及控制算法验证等研究方向。文档还提及该资源属于一个涵盖多个科研领域的MATLAB仿真资源包,涉及电力系统、机器学习、路径规划、信号处理等多个技术方向,配套提供网盘下载链接,便于用户获取完整资源。; 适合人群:具备Matlab/Simulink使用基础的高校研究生、科研人员及从事新能源汽车系统仿真的工程技术人员。; 使用场景及目标:①开展混合动力汽车能量管理策略的研究与仿真验证;②学习基于Simscape的物理系统建模方法;③作为教学案例用于车辆工程或自动化相关课程的实践环节;④与其他优化算法(如智能优化、强化学习)结合,实现控制策略的优化设计。; 阅读建议:建议使用者先熟悉Matlab/Simulink及Simscape基础操作,结合文档中的模型结构逐步理解各模块功能,可在此基础上修改参数或替换控制算法以满足具体研究需求,同时推荐访问提供的网盘链接获取完整代码与示例文件以便深入学习与调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值