Timer类和其他算法

【Timer计时器的使用】

var timer:Timer = new Timer(delay:Number, repeatCount:int = 0);

timer.addEventListener(TimerEvent.TIMER, onTimer);

timer.start();

private function onTimer(event:TimerEvent):void {

    //code

}

 
【以指定方向和速度移动元件】

speed: 目标速度

radians: speed与x轴的夹角,弧度

vx = Math.cos(radians) * speed;

vy = Math.sin(radians) * speed;

 
【缓动动画算法】

targetX,targetY: 目标坐标;

easingSpeed: 每次移动分数,范围0到1;

var vx:Number = (targetX - sprite.x) * easingSpeed;

var vy:Number = (targetY - sprite.y) * easingSpeed;

sprite.x += vx;

sprite.y += vy;

注意: 在非常逼近目标点时,往往找出通往目标点的距离,如果其值少于特定值,就应该停止该缓动.

 
【模拟弹簧往复运动算法】

五个变量: targetX(目标点的x坐标),sprite.X(物体的x坐标),vx(水平速度),ax(水平加速度),k(弹簧强度)

已知: targetX(目标点的x坐标),k(弹簧强度)

var ax:Number = (targetX - sprite.x) * k;

vx += ax;

sprite.x += vx;

注意: 这里只是水平方向的情形,也可以推广到垂直方向以及水平垂直一起来的情形

 
【模拟单摆运动】

四个变量: sprite.x(物体的x坐标),centerX(中心位置的x坐标),angle(弧度),radius(摆动的振幅,也就是摆动的范围)

sprite.x = centerX + Math.sin(angle) * radius;

angle += 0.05;

 
【模拟阻尼运动】

六个变量: targetX(目标点的x坐标),sprite.X(物体的x坐标),vx(水平速度),ax(水平加速度),k(弹簧强度),damp(阻尼系数)

已知: targetX(目标点的x坐标),k(弹簧强度)

var ax:Number = (targetX - sprite.x) * k;

vx += ax;

sprite.x += vx;

vx *= damp; //无阻力情况下的弹簧往复运动只缺少此句

注意: 这里只是水平方向的情形,也可以推广到垂直方向以及水平垂直一起来的情形.

这种原理可以推广到其它属性,如scaleX:

scaleVel += (targetScale - sprite.scaleX) * k;

sprite.scaleX += scaleVel;

scaleVel *= damp;

 
【计算两点间的角度】

Math.atan2(y:Number, x:Number):Number

y: 两点间的垂直距离

x: 两点间的水平距离

返回一个以弧度为单位的角度,返回值介于正PI和负PI之间.

 
【让物体指着鼠标(跟随眼睛)】

var dx:Number = mouseX - sprite.x;

var dy:Number = mouseY - sprite.y;

var radians:Number = Math.atan2(dy, dx);

sprite.rotation = radians * 180 / Math.PI;

 
【联结字符串时需要注意的地方】

var result:String = 2 + 6 + "a";

trace(result); //输出: 8a

var result:String = "a" + 2 + 6;

trace(result); //输出: a26

var result:String = "a" + (2 + 6);

trace(result); //输出: a8

 
【查找匹配的字符串】

使用String.indexOf(val:String, startIndex:Number = 0):int

返回指定子字符串的第一个匹配项的索引,没有匹配就返回-1

查找所有匹配的字符串:

var index:int = -1;

while((index = myString.indexOf("val", index + 1)) != -1) {

    trace("结果:" + index);

}

使用String.lastIndexOf(val:String, startIndex:Number = 0x7FFFFFFF):int

返回指定子字符串的最后一个匹配项的位置,没有匹配就返回-1

var index:int = myString.length;

while((index = myString.lastIndexOf("val", index - 1)) != -1) {

    trace("结果:" + index);

}

注意: indexOf()和lastIndexOf()方法都是区分大小写的.想把大小写都查找出来的话,可以结合String.toLowerCase()和String.toUpperCase()方法先把字符串一起转为小写或大写再进行查找.

 
【提取子字符串】

String.substr(startIndex:Number = 0, len:Number = 0x7fffffff):String

String.substring(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String

String.slice(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String

substr()第一个参数可以是负值,表示索引值是从字符串尾端算过来,-1是最后一个字符;

substring()和slice()差别在于substring()只接受正索引值,而把负值作为0处理.另外,如果endIndex小于startIndex,substring()方法在执行前,会自动将其调换过来,总是使用两个参数中较小的值作为起始索引.

slice()方法可接受startIndex和endIndex为负值,而把负值表示为从字符串的尾端算回来,如果endIndex小于startIndex,slice()方法会返回空字符串.

 
【以指定模式拆分字符串】

String.split(delimiter:*, limit:Number = 0x7fffffff):Array

 
【替换指定的字符串】

使用String.replace(pattern:*, repl:Object):String

可以这样来替换所有指定的字符串: myString.split("a").join("b");

 
【按单词或单个字母逆转字符串】

1. 把字符串切割使用String.split()方法成一个数组:对单词而言,以空格作为分界符,对字母而言,以空字符("")作为分界符;

2. 使用Array.reverse()方法对数组进行逆转;

3. 使用Array.join()方法重新组合为字符串:对单词而言,以空格(" ")作为联结符,对字母而言,以空字符("")作为联结符;

你可能感兴趣的:(timer)