Walter She's Blog

flash,flex ,javascript原创教程,web设计,Flash RIA,其它与之相关的内容.

« 将文本文件当作XML使用css 下拉菜单 »

Flash中很少被使用的技巧

通常我们只需使用AS的很少一部分就可以解决我们的大部分问题,有些AS我们可能一辈子都不会用到,下面就介绍一些这些几乎被遗忘的AS的使用方法。

1、求模运算符 %

A:Clamp

trace(15 % 6); // 显示: 3

a%b 的结果从来都不会比b大,所以你可以用来限制一个表达式在0-b的范围内。

//ball为舞台上的一电影剪辑
ball.onEnterFrame = function{

  this._x = (this._x + speed)%300;

}

B:Snap

x = 350;

trace(x - x%100); // 一个小于x但是又是100的倍数 = 300

trace(x + x%100); // 一个大于x但是又是100的倍数 = 400


下面是一个范例:

新建一flash文档大小为 300*240,使用矩形工具画一无边框的正方形,边长为30,然后转换为电影剪辑,并给一实例名为ball,新建一个图层并在此图层放入如下代码:

ball.onMouseMove = function( ) {

  this._x = _xmouse - _xmouse%size;

  this._y = _ymouse - _ymouse%size;

  updateAfterEvent( );

};

var size:Number = 30;

//参数null将线条设为极细
this.lineStyle(null, 0x0, 100);

for(var i=0;i<=10;i++){
    this.moveTo(i*30, 0);
    this.lineTo(i*30, 240);
}
for(var i=0;i<=8;i++){
    this.moveTo(0, i*30);
    this.lineTo(300, i*30);
}


移动鼠标你会发现小方块始终都停留在小方格里面。


2、求绝对值 Math.abs( ) 方法

Math.abs(5) 和 Math.abs(-5) 都返回 5,我们可以使用-5--5 来表示0--10的个范围。通常我们检测一个电影剪辑的x,y坐标是否与舞台相接触时会有四个条件,如果使用Math.abs( )则只需要两个条件,这样做的好处是程序运行的更快。

var sWidth:Number = Stage.width;
var sHeight:Number = Stage.height;

//将原点坐标(0,0)移动到舞台的正中央
this._x = sWidth / 2;
this._y = sHeight / 2;

// 画一矩形填充flash的可视区域作为背景
this.lineStyle(undefined, 0x0, 100);
this.beginFill(0xF0FAFF, 100);

this.moveTo(-sWidth/2, -sHeight/2), this.lineTo(sWidth/2, -sHeight/2);
this.lineTo(sWidth/2, sHeight/2), this.lineTo(-sWidth/2, sHeight/2);
this.endFill( );

// 建立 20个小球
for (var i = 0; i < 20; i++) {

  var ball:MovieClip = this.createEmptyMovieClip("ball"+i,

                       this.getNextHighestDepth( ));

  ball.lineStyle(5, 0x0808AF, 100);

  ball.lineTo(0, 1);

  ball.xSpeed = Math.random( ) * 10;

  ball.ySpeed = Math.random( ) * 10;

  this["fastAnim"+i] = setInterval(anim, 1, ball);

}

//小球运动函数
function anim(target:MovieClip):Void {
  //只需要两个判断语句即可
  if (Math.abs(target._x) > 275) {

    target.xSpeed = -target.xSpeed;

  }

  if (Math.abs(target._y) > 120) {

    target.ySpeed = -target.ySpeed;

  }

  target._x += target.xSpeed;

  target._y += target.ySpeed;

  updateAfterEvent( );

}


3、移位操作符

Flash允许你定义像素值精确到.05px(更小的值将会被忽略),当一个图形的位置坐标是小数时,Flash会对该图形进行抗锯齿操作,图形看起来会有一些模糊。将下面代码放在Flash新文档的第一帧,然后测试。

//你可以新建一空电影剪辑然后在此剪辑里用文本工具随意写点文字并设为静态文本,然后在舞台上
给此剪辑一实例名为ball
ball.onEnterFrame = function ( ):Void {

  this._x -= (this._x - _xmouse) / 4;

  this._y -= (this._y - _ymouse) / 4;

  trace(this._x)

};


你会发现输出面板输出的值几乎都是小数,另外文本很模糊,即使你选择了文本抗锯齿也不行。原因在于
文本的位置值是小数,所以被模糊了。

Flash帮助文档中的一句原话:将一个值右移一位等效于将它除以 2 并去掉余数。

所以将代码改为下面:

ball.onEnterFrame = function ( ):Void {

  this._x -= (this._x - _xmouse) >> 2;

  this._y -= (this._y - _ymouse) >> 2;

  trace(this._x)

};

测试影片你会发现输出面板的输出值都为整数并且文本也很清晰。
  • quote 1.james
  • trace(x + x%100); // 一个大于x但是又是100的倍数 = 400
    这个不对哦,呵呵
  • 2006-8-8 16:53:24 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表