Html/Javascript 做游戏的第一步: 2球碰撞游戏(附全部代码)
本来一心一意学Python, 结果在做爬虫的时候,发现如果不懂Html/Javascript 的话, 很难做好。 好吧, Html/Javascript 确实很枯燥, 只好先做个小游戏: 2 球动态碰撞, 碰撞后自动分开。这样, 学习起来应该更有趣一些。
代码如下:
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="300" height="280"></canvas>
<script>
var ctx = document.getElementById('myCanvas').getContext('2d');
var lastframe = 0;
var Box={x:1,y:1,width:myCanvas.width-2,height:myCanvas.height-2};
class Ball {
constructor(x,y,r,speed) {
this.x=x;
this.y=y;
this.r=r;
this.xdir=1;
this.ydir=1;
this.speed=speed;
}
update(dt) {
this.x+=dt*this.speed*this.xdir;
this.y+=dt*this.speed*this.ydir;
if (this.y+this.r> Box.height+Box.y){
this.ydir=-1;}
if (this.x+this.r>Box.width+Box.x) {
this.xdir=-1;}
if (this.y-this.r< Box.y){
this.ydir=1;}
if (this.x-this.r<Box.x) {
this.xdir=1;}
}
}
const ball1=new Ball(12,23,20,200);
const ball2=new Ball(150,210,35,150);
function collide(b1,b2) {
dist=Math.sqrt((b1.y-b2.y)*(b1.y-b2.y)+(b1.x-b2.x)*(b1.x-b2.x));
if (dist<b1.r+b2.r) return 1;
return 0;}
function main(tframe) {
// Request animation frames
window.requestAnimationFrame(main);
//document.write(tframe)
// Update and render the game
update(tframe);
render();
}
function update(tframe) {
var dt = (tframe - lastframe)/1000;
lastframe = tframe;
ball1.update(dt);
ball2.update(dt);
if (collide(ball1,ball2)) {
temp=ball1.xdir;
ball1.xdir=ball2.xdir;
ball2.xdir=temp;
temp=ball1.ydir;
ball1.ydir=ball2.ydir;
ball2.ydir=temp; }
}
function draw_ball(b) {
ctx.fillStyle = "#f00";
ctx.beginPath();
ctx.arc(b.x,b.y,b.r,0,2*Math.PI,1);
ctx.fill();
}
function drawFrame() {
// Draw background and a border
ctx.fillStyle = "#d0d0d0";
ctx.fillRect(0, 0, myCanvas.width, myCanvas.height);
ctx.strokeStyle="#000000";
ctx.lineWidth=2;
ctx.strokeRect(Box.x,Box.y,Box.width,Box.height);
}
function render() {
drawFrame();
draw_ball(ball1);
draw_ball(ball2);
}
main(0);
</script>
</body>
</html>
Html/Javascript 做游戏的第一步: 2球碰撞游戏(附全部代码)相关推荐
- 浪潮服务器nf5270m5做raid_服务器安装第一步RAID配置——企业服务器常用RIAD技术介绍及配置...
其实服务器安装第一步是打开包装箱,呵呵,第二步是安装导轨,第三步服务器上机架,第四步接上显示器,第五步通电开机-为啥我说服务器安装第一步是RAID配置,因为它相当重要!这是你在服务器安装相关系统之前的 ...
- 虚幻引擎 创建游戏的第一步,人类的一大步
制作第一步,输入映射 前为正后为负,左为负右为正 设置鼠标控制旋转映射 Horizontal mouse movement为鼠标水平移动 Vertical mouse movement为鼠标竖直移动 ...
- unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理
前言很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本 ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 单人扑克游戏:地城恶棍的Python实现(附实现代码)
基于Numpy的单人扑克游戏:地城恶棍 [!] 本项目为原创内容,若有错误之处还需批评指正 由于篇幅过长,本文全代码文件位于另一个博客中:传送门 文章目录 基于Numpy的单人扑克游戏:地城恶棍 1. ...
- unity java游戏大全_3D unity 滚球小游戏
3D unity 滚球小游戏 1.打开unity,创建一个新的项目(或在已创建的项目里创建一个新的场景). 2.制作平台 创建一个Plane和四个cube模型,附上相应的材质,调整大小和位置,形成一个 ...
- unity3d,跟着大佬做自己的第一个游戏(第一步,游戏模型制作)
网址http://www.bilibili.com/video/av5814699/当然我不会全部按照他的来 首先下载了一个magicavoxel 某乎介绍https://zhuanlan.zhihu ...
- lua 学习笔记---游戏开发第一步
lua 学习笔记-从数组开始 数组 数组大小范围不一定需要在声明是确定,可以改变 一维数组 例 > array = {"Lua", "lualu"} &g ...
- 桌球游戏java_JAVA 第一个小项目 桌球游戏 (桌球小程序练习)
标签: 今天装了Eclipse 学习第一个小程序'' #加载窗口 #画窗口 import java.awt.*; import javax.swing.*; public class BallGame ...
最新文章
- 【c语言】蓝桥杯算法提高 简单加法
- Navicat for Oracle Cannot load OCI DLL
- BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
- 1380C. Create The Teams
- RabbitMq(十三)消息发送确认与回调机制
- mysql三高讲解(二)2.9: mysql示例数据库sakia database的使用
- linux中安装和配置 jdk
- Android全局变量使用
- 小腹下面是什么部位_产后新妈妈去掉大肚腩,恢复平坦小腹,不妨试试这4个动作...
- java简单租车系统 慕课手记_Java租车系统(新手)
- python vtk_Python vtk.vtkRenderer方法代码示例
- Java编程英语单词大全_java编程常用英语单词
- 老旗舰华为能用上鸿蒙吗,千元机也能用鸿蒙!曝荣耀 9X 手机年内全部升级鸿蒙系统...
- 计算机网络英文习题(中文及答案解析)
- 怎样让表格的行高一样_怎么把excel的行高变成一样的
- Eigenvalue of random matrix
- 香港科技大学委任汪扬教授为副校长(大学拓展)
- 解决Linux没有声音的问题
- 全息存储:名气大于实力的存储技术?
- 过采样和求均值提高ADC分辨率
热门文章
- RN8302B模块资料
- Python异常处理try,except,else,finally用法解析。
- 数字图像处理——皮肤美白(Skin whitening)算法实现
- NumberFormatException: For input string: quot;quot;数字格式异常解决
- 河源微信分销系统开发日记:wordpress每篇文章评论人数统计
- Replicates
- android如何动态显示时间轴,Android时间轴的实现
- Python实现简单的勒索病毒
- 【人工智能】自动化编程的历史,现状,发展与未来
- unity使用websocket接受服务器数据推送