程式3:有重力加速度的球
程式3:有重力加速度的球
這個程式對應於 NOC_2_1_forces.pde
,
我們繪製了一個有重力加速度的球。越下落速度越快,但接觸地面時會反彈,由於重力作用,越上升速度越慢。
點選按鈕 West Wind 對球施加從左吹來的風力作用。
可以從 https://github.com/jollywing/nature_of_code_examples_html5/blob/master/chp2_forces/wind_gravity_forces.html 下載該程式,用瀏覽器開啟即可執行。
程式程式碼如下:
<!doctype html>
<html>
<head>
<title>Wind and Gravity force</title>
<meta charset="utf-8" />
<meta name="author" content="JollyWing(jiqingwu@gmail.com)"/>
<meta name="create" content="2015-01-06 Tue"/>
<style type="text/css">
#screen {border:1px solid #000; margin-left:auto; margin-right:auto;}
p.Scr {text-align:center;}
</style>
<script>
// get context
var scr;
var ctx;
var timeOut;
var position = new Object();
position.x = 5;
position.y = 5;
var velocity = new Object();
velocity.x = 0;
velocity.y = 0;
var gravityAccel = new Object();
gravityAccel.x = 0;
gravityAccel.y = 1;
var windAccel = new Object();
windAccel.x = 1;
windAccel.y = 0;
var ball = {
pos: position,
radius: 5,
vel: velocity,
erase: function(){
var top, left;
//caculate the topleft
left = this.pos.x - this.radius - 1;
top = this.pos.y - this.radius - 1;
// clear rect
ctx.clearRect(left, top, this.radius*2 + 2, this.radius*2 + 2);
},
draw: function(){
// set context property
ctx.strokeStyle="red";
ctx.fillStyle="yellow";
// draw
ctx.beginPath();
ctx.arc(this.pos.x, this.pos.y, this.radius, 0, 2*Math.PI);
ctx.stroke();
ctx.fill();
},
checkEdge: function(){
if(this.pos.x < 0){
this.pos.x = this.radius;
this.vel.x *= -1;
}
if(this.pos.x > scr.width){
this.pos.x = scr.width - this.radius;
this.vel.x *= -1;
}
if(this.pos.y < 0){
this.pos.y = this.radius;
this.vel.y *= -1;
}
if(this.pos.y > scr.height){
this.pos.y = scr.height - this.radius;
this.vel.y *= -1;
}
},
addForce: function(accel){
this.vel.x += accel.x;
this.vel.y += accel.y;
},
move: function(){
this.pos.x += this.vel.x;
this.pos.y += this.vel.y;
},
};
function initScr(){
scr = document.getElementById('screen');
ctx = scr.getContext('2d');
ball.draw();
}
function updateScr()
{
// erase ball
ball.erase();
// add gravity force
ball.addForce(gravityAccel);
// update ball position
ball.move();
// check edges
ball.checkEdge();
// draw ball
ball.draw();
timeOut = setTimeout('updateScr()', 100);
}
function startWalk()
{
updateScr();
}
function stopWalk()
{
clearTimeout(timeOut);
}
function westWind()
{
// add wind force to velocity
ball.addForce(windAccel);
}
</script>
</head>
<body onload="initScr()">
<p class="Scr">
<canvas id="screen" width="640" height="640"></canvas>
<br/>
<input type="button" value='Start' onclick='startWalk()'/>
<input type="button" value='Stop' onclick='stopWalk()' />
<input type="button" value="West Wind" onclick='westWind()'/>
</p>
</body>
</html>
相關文章
- CSS3彈球效果程式碼例項CSSS3
- 程式設計思路-球連球組成的群程式設計
- css3漂浮氣球效果程式碼例項CSSS3
- ios買球app推薦 蘋果手機買球的app有哪些iOSAPP蘋果
- 程式1: 彈來彈去的球
- css3實現網狀球體效果程式碼例項CSSS3
- css3實現的滾動的檯球效果CSSS3
- CSS3實現的圓球放大縮小效果CSSS3
- 買球賽的軟體哪個好 手機線上球賽買球appAPP
- js重力球效果程式碼例項JS
- ELEC 292球門 桌面應用程式
- 《球球大作戰》優化之路(上)優化
- 《球球大作戰》優化之路(下)優化
- 合法買球的app 網上app買球算犯法嗎APP
- 2153: 【例8.3】計算球的體積 球的體積公式公式
- 可以玩滾球的正規app 足球滾球推薦好的appAPP
- three.js實現的3D球狀拖動旋轉效果JS3D
- [SceneKit專題]22-3D平衡球遊戲Marble-Maze3D遊戲
- tkinter飛機大戰測試程式by李興球
- css3帶有光暈的流星效果程式碼例項CSSS3
- 《球球大作戰》原始碼解析(7):遊戲迴圈原始碼遊戲
- 《球球大作戰》原始碼解析(6):碰撞處理原始碼
- 可以買球的手機app 網上比較正規的買球軟體APP
- 比較正規的買球軟體 可以買球賽的軟體推薦
- 足球壓球軟體app 世界盃可以玩滾球的正規appAPP
- 十大滾球體育app 可以玩滾球的正規appAPP
- Vue3教程:用 Vue3 開發小程式,這裡有一份實際的程式碼案例!Vue
- 【科普】Scrum——從橄欖球爭球到敏捷開發Scrum敏捷
- 《球球大作戰》原始碼解析——(9)訊息處理原始碼
- 《球球大作戰》原始碼解析(8):訊息廣播原始碼
- 《球球大作戰》原始碼解析:移動演算法原始碼演算法
- 《球球大作戰》原始碼解析——(1)執行起來原始碼
- PONG - 100行程式碼寫一個彈球遊戲行程遊戲
- 在世界球場一球成名:HMS 生態為遊戲開發者送出的助攻遊戲開發
- Android自定義View之實現簡單炫酷的球體進度球AndroidView
- 華瑞IT校園籃球賽:熱血少年,球場爭鋒
- 20:球彈跳高度的計算
- 簡單的傳球遊戲(矩陣)遊戲矩陣