Timer類和其他演算法

2021-08-31 19:35:07 字數 3700 閱讀 7391

【timer計時器的使用】

var timer:timer = new timer(delay:number, repeatcount:int = 0);

timer.addeventlistener(timerevent.timer, ontimer);

timer.start();

private function ontimer(event:timerevent):void

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

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 = mou*** - 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)

使用string.lastindexof(val:string, startindex:number = 0x7fffffff):int

返回指定子字串的最後乙個匹配項的位置,沒有匹配就返回-1

var index:int = mystring.length;

while((index = mystring.lastindexof("val", index - 1)) != -1)

注意: 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()方法重新組合為字串:對單詞而言,以空格(" ")作為聯結符,對字母而言,以空字元("")作為聯結符;

其他聚類演算法

二 birch 聚類演算法 三 mean shift 演算法 3.1簡介 四 affinity propagation 4.1 簡介 五 spectral clustering sklearn提供了其他很多聚類演算法 這個演算法專門為大型資料集設計的,它可以比kmeans還快,且結果差不多。但要注意...

jdk中的Timer類理解和學習

定時任務中只有乙個執行緒和乙個任務佇列 該佇列是乙個優先順序佇列,基於最小堆實現,時間距現在最近的任務排在開頭 任務的執行是根據當前時間進行判斷是否執行,如果任務的執行時間大於當前時間就在佇列上等待,否則更新任務的下次時間給任務,然後進行任務的執行 只要執行緒啟動後,就會在乙個while迴圈中不斷的...

關於C 中timer類

關於c 中timer類 在c 裡關於定時器類就有3個 1.定義在system.windows.forms裡 2.定義在system.threading.timer類裡 3.定義在system.timers.timer類裡 例 使用system.timers.timer類 system.timers....