1. 程式人生 > >2d物理引擎01

2d物理引擎01

blue idt 不知道 速度 物理引擎 alt 坐標 obj key

我一直想做一個遊戲,但一直感覺自己水平不夠

想了想覺得不去做的話就永遠做不出來

所以有了這個博文

01

我需要一個東西來顯示,很顯然h5中canvas是很好的選擇

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/map.js" type
="text/javascript" charset="utf-8"></script> <script src="js/obj.js" type="text/javascript" charset="utf-8"></script> <script src="js/碰撞.js" type="text/javascript" charset="utf-8"></script> <title></title> </head> <body> <
canvas style="border: 1px solid lightseagreen;" onclick="單擊()" onkeydown="input_key()" id="id-canvas" width="800" height="600"></canvas> </body> </html>

02

一個引擎到底該怎麽寫?我不知道

需要哪些功能?我也不知道

但我覺得首先我需要能在畫板上畫點什麽

我需要一個主角

function 誕生(color){return {
x:100,y:100,
r:20,m:20,
Vx:Math.random()*10*隨機取負(),Vy:Math.random()*10*隨機取負(), //v=v+at v+=a v+=F/m
Fx:0,Fy:0, //F=ma a=F/m
g:3,
color:color,
}}
function 隨機取負(){
if(Math.random()>0.5)
return(-1)
return(1)
}

我想了想這個主角會有這樣的一些屬性

x,y  自身坐標

r   它的大小,因為他是圓的所以是半徑

m   它的質量

Vx,Vy  它的速度,根據我可憐的高中物理知識將速度分解成x和y兩個分量

g    它受到的引力,按理來說引力應該是大家共享的,但我為了以後可能會有的漂浮之類的效果給了每一個對象一個g

color    它的外表

好了,一個主角構建成功

現在是要把它畫出來

cav=document.getElementById("id-canvas")
ctx=cav.getContext(‘2d‘)、

e=誕生(‘blue‘)

ctx.fillStyle=e.color

ctx.arc(e.x,e.y,e.r,0,2*Math.PI)

ctx.fill()

技術分享圖片

嗯,畫出來了,感覺我的遊戲可能成功了一半

2d物理引擎01