運動最基本的屬性就是速度。注意這裡的速度是物理中所說的速度(velocity),它包括大小及方向兩部分組成。在動畫中,如果我們已知當前一幀物件的位置以及速度,那在下一幀我們就能計算出物體所在的位置。在大多數情況下,速度的大小是按畫素/幀為單位的,但實際執行中,由於瀏覽器的幀率不穩定性,會出現小的差別。如果應用對於統一幀率要求很嚴格,可以使用其它的方式來處理,之後我們會介紹這方面的知識。
物理中我們使用向量來表示速度,向量包括大小和方向兩個屬性。其大小是乙個非負整數。向量是沒有位置的,它只能表示在某一方向上大小的改變快慢。兩個向量在大小和方向都相同的情況下是相等的。
對於向量的相加,我們通常會將向量按座標軸正交分解,之後在每個座標軸方向上執行對應的加法,最後再將兩個座標軸上的結果進行正交合成,即得到向量相加的結果。
我們給之前的的ball類新增vx與vy 來分別表示x軸及y軸下的速度大小。物件的移動就可以在每一幀開始時給其座標增加加對應的速度大小來實現。如下:
window.οnlοad=function())();如上**所示,每一幀開始時,我們為小球的x座標ball.x增加了其在x軸上的速度ball.vx,於是就可以實現小球從初始位置一直向右移動的效果。};
二維座標系統下的速度
二維座標下的速度計算非常簡單,我們只需要分別對x與y軸上運動物件的位置屬性增加對應座標軸上運動物件的速度大小即可(如果速度是反向的,就需要減少速度大小)。此時,**為:
window.οnlοad=function())();如上**所示,每一幀開始時,我們為小球的x座標ball.x增加了其在x軸上的速度ball.vx,同時為小球y座標ball.y增加了其在y軸上的速度ball.vy。這樣,在運動中速度正交合併後,就可以實現小球從初始位置開始沿合併方向運動以速度大小移動的效果。};
已知初始方向及大小的速度
vx=math.cos(angle)*v;此時,我們之前的運動小球的**如下:vy=math.sin(angle)*v;
window.οnlοad=function())();此時就實現了小球從初始位置,以方向45度,大小為1的速度移動的效果。};
之前,我們實現了乙個跟隨滑鼠位置轉到的箭頭,在此我們給箭頭新增速度,讓箭頭跟隨滑鼠移動。首先,需要給箭頭新增兩個座標軸方向的速度屬性。接著,在每一幀中我們計算出箭頭中心到滑鼠所在位置的向量,此時箭頭的速度給箭頭位置新增此向量後即可。**實現如下:
window.οnlοad=function())();除了對於運動物件的位置使用速度來改變,我們也可以對於運動物件的其它屬性使用這種方式來進行改變。比如物件的旋轉屬性,在遊戲中就是經常使用到的乙個功能。下面我們實現乙個物件自旋的功能。};
window.οnlοad=function())();};
專案管理系列分享(六) 最佳實踐 需求
在軟體開發中,如果你問任何經理 在管理專案中,你的痛點是什麼?超過85 的人會說 需求。在這個領域,我們的經驗教訓是什麼?未來在專案中我們如何做的更好?接下來,我們將強調我們在需求培訓課程中所教的原則如何幫助需求分析師來提高他們的工作 問題1 在需求階段我們沒有識別和包括 正確的 干係人。這經常會在...
Canvas學習實踐 一款簡單的動畫遊戲
最近學習了下canvas繪圖。突發奇想就有了下面這款簡單的小遊戲,純屬娛樂 廢話不多說,直接上 doctype html html lang zh head meta charset utf 8 title 小怪獸吃豆豆 title style canvas score title style he...
騰訊遊戲分享匯 天天飛車六大研發經驗
序言 轉型手遊,問題比想象要複雜。一些問題是研發階段就能預見的,但是有些問題上線後才發現遠超出我們的想象。從端遊轉型做手遊變化遠沒有想象簡單 可能和公司內很多手遊研發團隊一樣,我們也是從傳統pc端遊轉型做手遊的。我們一度認為手遊研發會比較輕鬆,技術上跟端遊比起來相對容易,人力上也不需要太多投入。但真...