AS3 CookBook学习整理(二)
1. 我要改变影片的对齐方式
使用stage.align属性
stage.align的值是flash.display.StageAlign类的一个枚举。其值如下:
| Value | Vertical Alignment | Horizontal |
| StageAlign.TOP | Top | Center |
| StageAlign.BOTTOM | Bottom | Center |
| StageAlign.LEFT | Center | Left |
| StageAlign.RIGHT | Center | Right |
| StageAlign.TOP_LEFT | Top | Left |
| StageAlign.TOP_RIGHT | Top | Right |
| StageAlign.BOTTOM_LEFT | Bottom | Left |
| StageAlign.BOTTOM_RIGHT | Bottom | Right |
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class Sample1105 extends Sprite
{
public function Sample1105()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_RIGHT;
this.graphics.beginFill(0xFF0000);
this.graphics.drawRect(10,10,stage.stageWidth,stage.stageHeight);
this.graphics.endFill();
}
}
}2. 确定客户端是否能播放音频
使用flash.system.Capabilities的hasAudio判断是否支持音频,hasMP3判断是否能播放MP3
if(flash.system.Capabilities.hasAudio && flash.system.Capabilities.hasMP3)
{
}
else
{
}3. 提示用户改变播放器设置
使用flash.system.Security.showSettings()方法打开用户的Flash播放器设置对话框窗口
该方法接受一个flash.system.SecurityPanel枚举作为参数。对应功能如下:
SecurityPanel.DEFAULT 默认面板
SecurityPanel.CAMERA 摄像头面板
SecurityPanel.LOCAL_STORAGE 本地存储面板
SecurityPanel.MICROPHONE 话筒面板
SecurityPanel.PRIVACY 安全控制面板
SecurityPanel.SETTINGS_MANAGER 管理面板会打开浏览器进行更多设置
package {
import flash.display.Sprite;
import flash.system.Security;
import flash.system.SecurityPanel;
public class Sample1117 extends Sprite
{
public function Sample1117()
{
flash.system.Security.showSettings(flash.system.SecurityPanel.DEFAULT);
}
}
}4. 对数值进行四舍五入或取近似值
用Math.round()进行四舍五入,Math.floor()和Math.ceil()进行上下近似值。NumberUtilities.round()方法可自定义取值
package {
import ascb.util.NumberUtilities;
import flash.display.Sprite;
public class Sample1117 extends Sprite
{
public function Sample1117()
{
trace(Math.round(234.56)); //235
trace(Math.floor(234.56)); //234;
trace(Math.ceil(234.56)); //235;
trace(Math.round(123.456*100)/100);//123.46;
//也有一种写法,可读性比上面好
trace(Math.round(123.456/0.1)*0.1);//123.5;
//第三方函数的方法,实现机制其实和上面一样
trace(NumberUtilities.round(123.456,0.1)); //123.5
trace(NumberUtilities.round(123.456,6)); //126;
}
}
}5. 对数字和字符串进行格式化
用NumberFormat对象的format()与currencyFormat()方法。由于是第三方类库,测试过程中发现有些不完善。自己写了一个格式化货币的方法
package {
import flash.display.Sprite;
public class Sample1118 extends Sprite
{
public function Sample1118()
{
var money:Number = 26591234569.5678;
trace(formatString(money));//26,591,234,569.57
var i:int = 1234;
trace(formatString(i));//1,234.00
trace(formatString("fox"));
}
private function formatString(obj:Object):String
{
if(obj is int||obj is uint||obj is Number)
{
var money:Number = obj as Number;
var str:String = (Math.round(money/0.01) * 0.01).toString();
var _index:int = str.indexOf(".");
var cursor:int = 0;
if(_index>-1)
{
cursor = _index;
str = str.substring(0,_index + 3);
while(str.length < _index+3)
{
str = str + "0";
}
}
else
{
cursor = str.length;
str = str+".00";
}
var arrStr:Array = new Array();
while(cursor-3>=0)
{
arrStr.push(str.substr(cursor-3,3));
cursor = cursor-3;
}
if(cursor>0)
{
arrStr.push(str.substr(0,cursor));
}
arrStr.reverse();
return arrStr.join(',') + str.substr(str.indexOf("."));
}
else
{
return obj.toString();
}
}
}
}6. 生成随机数(猜硬币)
用NumberUtilities.random(0,1)方法产生随机数
package {
import ascb.util.NumberUtilities;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
public class Sample1118 extends Sprite
{
private var label:TextField;
public function Sample1118()
{
label = new TextField();
label.background = true;
label.backgroundColor = 0xFF0000;
label.textColor = 0xF7FCFF;
label.autoSize = "left";
this.addChild(label);
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0xFFFF00);
sprite.graphics.drawCircle(100,100,50);
sprite.graphics.endFill();
sprite.addEventListener(MouseEvent.CLICK,OnClick);
this.addChild(sprite);
}
private function OnClick(event:MouseEvent):void
{
if(NumberUtilities.random(0,1)==0)
{
label.text = "正面";
}
else
{
label.text = "背面";
}
}
}
}7. 生成随机数(骰子)
用NumberUtilities.random(1,6)方法产生随机数
package {
import ascb.util.NumberUtilities;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Sample1119 extends Sprite
{
private var sprite:Sprite;
public function Sample1119()
{
sprite = new Sprite();
this.addChild(sprite);
sprite.addEventListener(MouseEvent.CLICK,OnClick);
OnClick(null); //第一次显示出来
}
private function OnClick(event:MouseEvent):void
{
sprite.graphics.clear();
sprite.graphics.beginFill(0xFFFFFF);
sprite.graphics.drawRect(0,0,50,50);
sprite.graphics.endFill();
var randNum:int = NumberUtilities.random(1,6);
sprite.graphics.beginFill(0x000000);
if(randNum==1)
{
sprite.graphics.drawCircle(25,25,6);
}
else if(randNum!=2)
{
sprite.graphics.drawCircle(8,8,6);
sprite.graphics.drawCircle(42,42,6);
}
if(randNum==3||randNum==5)
{
sprite.graphics.drawCircle(25,25,6);
}
if(randNum==4||randNum==5||randNum==6)
{
sprite.graphics.drawCircle(42,8,6);
sprite.graphics.drawCircle(8,42,6);
}
if(randNum==2)
{
sprite.graphics.drawCircle(25,8,6);
sprite.graphics.drawCircle(25,42,6);
}
if(randNum==6)
{
sprite.graphics.drawCircle(8,25,6);
sprite.graphics.drawCircle(42,25,6);
}
sprite.graphics.endFill();
}
}
}8. 生成唯一随机数(基于毫秒)
调用NumberUtilities.getUnique()得到当前时间(精确到毫秒)的唯一数字
package {
import ascb.util.NumberUtilities;
import flash.display.Sprite;
public class Sample1119 extends Sprite
{
public function Sample1119()
{
for(var i:uint=0;i<10;i++)
{
trace(NumberUtilities.getUnique());
}
}
}
}9. 计算两点之间的距离
根据勾股定理,使用Math.pow()和Math.sqrt()联合计算
package {
import flash.display.Sprite;
import flash.geom.Point;
public class Sample1119 extends Sprite
{
public function Sample1119()
{
var p1:Point = new Point(10,20);
var p2:Point = new Point(100,200);
var x:int = p1.x - p2.x;
var y:int = p1.y = p2.y;
var length:Number = Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
trace(length);
}
}
}10. DisplayObject类结构图
flash.display包中包含Flash Player用于构建可视显示内容的核心类。DisplayObject类是可放在显示列表中的所有对象的基类


浙公网安备 33010602011771号