最近在用看cocos的时候萌生的想法,单纯js实现重力原理。然后就做了一个这样的小游戏。姑且命名为《超级玛丽》!

  因为之前有人要我做超级玛丽。哈哈哈哈哈哈!这也算完成任务了吧。

  先说一下原理吧。原理就是嗖~嗖~嗖~。

  好了正经的说下:

  是否处于跳跃中

self.isJump = false;

是否在地板上
self.canJump = false;

挑起的时间,时间越久上升速度越慢
self.JumpTimes = 0;

下降的时间,时间越久下降速度越块
self.downTimes = 0;

游戏运行时间周期(0~10)。判断地板块位置

self.times = 0;
//重力加速度大小 范围1~10,越大下降越快。挑起小
self.d2 = 2;
// 预设 地板块。可通过自定义函数设置
self.floorArry = [100, 0, 50, 100, 170, 0, 100, 50, 50, 0, 100, 200, 150, 0, 75];

跳: window.d2.jump 

开始游戏:self.srartGame 

结束游戏:self.endGame

设置地板快生成函数: self.setFloorFunc

开发者函数体 window.d2Init

示例代码:

 <!DOCTYPE html>
<html> <head>
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>SupperML</title>
<style type="text/css">
body {
margin-right: auto;
margin-left: auto;
padding-left: auto;
padding-right: auto;
width: 500px;
height: 300px;
z-index: 1;
} .floor {
width: 10px;
height: 10px;
float: left;
margin: 0;
z-index: 4;
background-color: darkgreen;
} .WFloor {
width: 10px;
height: 10px;
float: left;
margin: 0;
z-index: 4;
} #game_area {
margin-left: auto;
margin-right: auto;
position: absolute;
width: 500px;
height: 300px;
z-index: 3;
overflow: hidden;
}
</style>
<script type="text/javascript">
window.onload = function() {
var self = {};
//is jump;
self.isJump = false;
//gameObj on the floor;
self.canJump = false;
//jump time <14
self.JumpTimes = 0;
//down times
self.downTimes = 0;
//down times
self.times = 0;
//重力加速度
self.d2 = 2;
//width 10px*10, array length 6, 0:no floor show:5
self.floorArry = [100, 0, 50, 100, 170, 0, 100, 50, 50, 0, 100, 200, 150, 0, 75];
//strat game
var _Srart = function() {
_SetFloorElem();
},
//重力模拟
_D2Weight = function() {
var gameObj = document.getElementById('game_obj');
var floorObj1 = document.getElementById('2xy5');
var floorObj2 = document.getElementById('2xy6');
if (!self.isJump) {
if ((Math.abs((parseInt(gameObj.style.marginTop) + parseInt(gameObj.style.height)) - parseInt(floorObj1.style.marginTop)) < 10 + (2 * self.d2))) {
self.canJump = true;
self.downTimes = 0;
gameObj.style.marginTop = parseInt(floorObj1.style.marginTop) - parseInt(gameObj.style.height) + "px";
} else {
self.canJump = false;
self.downTimes++;
gameObj.style.marginTop = parseInt(gameObj.style.marginTop) + self.downTimes * self.d2 + 'px';
if (parseInt(gameObj.style.marginTop) > 500) {
self.endGame();
}
}
} else {
if (20 < self.JumpTimes * self.d2) {
self.JumpTimes = 0;
self.isJump = false;
self.downTimes = 0;
return;
}
if (Math.abs(parseInt(floorObj1.style.marginTop) + 10 - parseInt(gameObj.style.marginTop)) < 5) {
self.JumpTimes = 0;
self.isJump = false;
self.canJump = false;
} else {
self.JumpTimes++;
self.canJump = false;
gameObj.style.marginTop = parseInt(gameObj.style.marginTop) - 20 + self.JumpTimes * self.d2 + 'px';
}
}
},
//设置地板元素
_SetFloorElem = function() {
self.times += 1;
if (self.times == 10) {
self.times = 0;
}
var index = 0;
for (var i2 = 0; i2 < 5; i2++) {
for (var j2 = 0; j2 < 10; j2++) {
var oLi = document.getElementById(i2 + "xy" + j2);
if (self.times + j2 < 10) {
index = i2;
} else {
index = i2 + 1;
}
if (self.floorArry[index]) {
oLi.style.display = "floor";
oLi.style.marginTop = self.floorArry[index] + "px";
} else {
oLi.style.className = "WFloor";
oLi.style.marginTop = 5000 + "px";
}
}
}
},
//初始化游戏元素
_InitGame = function() {
var oFrag = document.createDocumentFragment();
for (var i = 0; i < 5; i++) {
for (var j = 0; j < 10; j++) {
var oLi = document.createElement("div");
oLi.id = i + "xy" + j;
oLi.className = 'floor';
//oLi.style.marginLeft = i * 100 + j*10 + "px";
oFrag.appendChild(oLi);
}
}
document.getElementById("game_area").appendChild(oFrag);
document.onkeyup = function(event) {
var e = event || window.event;
var keyCode = e.keyCode || e.which;
switch (keyCode) {
case 32:
self.jump();
break;
default:
break;
}
}
setInterval(_setFloor, 1000);
},
//设置地板位置
_setFloor = function() {
var top = self.func ? self.func() : 200;
if (top != 0 && ((self.floorArry[19] - self.floorArry) > 200 / self.d2)) {
top = self.floorArry[19] - 200 / self.d2;
}
self.floorArry.splice(0, 1);
self.floorArry.push(top);
};
var gameRole = document.getElementsByClassName('gameObj');
//跳
self.jump = function() {
if (self.canJump) {
self.isJump = true;
self.JumpTimes = 0;
}
}
//开始游戏
self.srartGame = function() {
if (self.timer) {
return;
}
_InitGame();
self.sTime = new Date();
self.timer = setInterval(_Srart, 100);
self.D2Weight = setInterval(_D2Weight, 100); }
//游戏结束
self.endGame = function() {
alert((Date.now() - self.sTime.getTime()) / 1000 + 's');
self.sTime
clearInterval(self.timer);
clearInterval(self.D2Weight);
location.reload();
}
//设置地板数据生成函数
self.setFloorFunc = function(func) {
self.func = func;
}
document.getElementById('jump').onclick = self.jump;
document.getElementById('start').onclick = self.srartGame;
window.d2 = self;
window.d2Init && window.d2Init();
};
</script>
</head> <body>
<div id="game_area">
<div id="game_obj" style="margin-left: 250px; margin-top:10px; position: absolute; z-index: 1; width: 17px; height: 20px; background-color: blueviolet;">69</div>
<button id="start" style="margin-left: 50px; margin-top:200px; position: absolute; z-index: 1;">Start</button>
<button id="jump" style="margin-left: 400px; margin-top:200px; position: absolute; z-index: 1;">Jump</button>
</div>
</body>
<script type="text/javascript">
window.d2Init = function() {
window.d2.setFloorFunc(
function() {
return window.d2.floorArry[0];
}
) }
</script> </html>

  

一个鸡蛋去茶馆喝茶,结果它变成了茶叶蛋;
一个鸡蛋跑去松花江游泳,结果它变成了松花蛋;
一有个鸡蛋跑到了山东,结果变成了鲁(卤)蛋;
一个鸡蛋无家可归,结果它变成了野鸡蛋;
一个鸡蛋在路上不小心摔了一跤,倒在地上,结果变成了导弹;
一个鸡蛋跑到人家院子里去了,结果变成了原子弹;
一个鸡蛋跑到青藏高原,结果变成了氢弹;
一个鸡蛋生病了,结果变成了坏蛋;
一个鸡蛋嫁人了,结果变成了混蛋;
一个鸡蛋跑到河里游泳,结果变成了核弹;
一个鸡蛋跑到花丛中去了,结果变成了花旦;
一个鸡蛋骑着一匹马,拿着一把刀,原来他是刀马旦;
一个鸡蛋是母的,长的很丑,结果就变成了恐龙蛋;
一个鸡蛋是公的,他老婆在外面和别的鸡蛋通*,结果他变成了王八蛋;
一个鸡蛋……
哈....哈哈.....哈哈哈........哈哈哈哈.....

单Js 的重力游戏开发的更多相关文章

  1. 学习笔记:Stage.js(又叫Cut.js)——2D canvas 开发库,游戏方面的

    http://piqnt.com/stage.js/ http://www.bootcdn.cn/stage.js/ Stage.js(可能又叫Cut.js)是一个2D HTML5 JavaScrip ...

  2. HTML5游戏开发引擎Pixi.js新手入门讲解

    在线演示 本地下载 ​这篇文章中,介绍HTML5游戏引擎pixi.js的基本使用. 相关代码如下: Javascript 导入类库:(使用极客的cdn服务:http://cdn.gbtags.com) ...

  3. nodejs五子棋online游戏开发视频教程,客户端cocos creator js

    开发的游戏是五子棋online,网络版的,服务端部分和客户端部分都在这个教程里面,可以看一下目录! 服务器nodejs游戏开发教程 使用Nodejs开发网络服务器 游戏服务端 ,cocos creat ...

  4. 算法、数据结构、与设计模式等在游戏开发中的运用 (一):单例设计(Singleton Design)

    算法.数据结构.与设计模式等在游戏开发中的运用 (一):单例设计(Singleton Design) 作者: Compasslg 李涵威 1. 什么是单例设计(Singleton Design) 在学 ...

  5. 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十 ...

  6. HTML5游戏开发系列教程8(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-8/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...

  7. Erlang游戏开发-协议

    Erlang游戏开发-协议 选择什么协议? 协议包含通讯协议和数据格式. 通讯协议 通讯协议目前常用的是:HTTP 和TCP .其有各自的特点根据游戏的特点而进行选择. HTTP HTTP比较成熟,使 ...

  8. 作为前端的你,CC游戏开发可以上车

    1. 初来乍到 打开 Cocos Creator 点击新建空白项目,在默认布局的左下区域,一个黄黄assets文件夹映入眼帘.作为前端的你对这个文件是不是再熟悉不过了.是的,和你想象的一样,开发游戏中 ...

  9. Aery的UE4 C++游戏开发之旅(1)基础对象模型

    目录 UObject Actor种类 AActor APawn(可操控单位) AController(控制器) AGameMode(游戏模式) AHUD(HUD) ... Component种类 UA ...

随机推荐

  1. 腾讯云数据库团队:MySQL AHI 实现解析

    MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上:如果树高 ...

  2. No module named machinery

    py2exe模块0.9版本只支持python3以上,要想在python2.7中运用,就要下载0.6 版本的py2exe http://sourceforge.net/projects/py2exe/f ...

  3. JavaScript高级程序设计(学习)

    文档模式是:混杂模式和标准模式. 若在文档开始处没有文档类型声明,则浏览器就会开启混杂模式.这种模式在不同的浏览器下行为差异非常大,如果不使用某些hack技术,跨浏览器的行为根本就没有一致性可言. 局 ...

  4. 看懂SqlServer查询计划 SQL语句优化分析

    转自 http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 阅读目录 开始 SQL Server 查找记录的方法 SQL Ser ...

  5. DLL:无法解析的外部符号 "__declspec(dllimport)

    (4.10)碰到问题:MFC规则DLL(静态库1)中,AFX_EXT_CLASS导出类及类的对象.在静态库2中使用.出现两个问题:  (1) 静态库1中警告:dll链接不一致;  (2) 静态库2中报 ...

  6. UT源码-124

    (1)设计三角形问题的程序 输入三个整数a.b.c,分别作为三角形的三条边,现通过程序判断由三条边构成的三角形的类型为等边三角形.等腰三角形.一般三角形(特殊的还有直角三角形),以及不构成三角形.(等 ...

  7. dispaly属性,position属性

    position:absolute;绝对定位相对于父元素(父元素设为relative) position:relative;相对定位相对于自己 position:fixed;固定定位相对于浏览器 di ...

  8. MCMC(四)Gibbs采样

    MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)MCMC采样和M-H采样 MCMC(四)Gibbs采样 在MCMC(三)MCMC采样和M-H采样中,我们讲到了M-H采样已经可以很好 ...

  9. Adobe 系列软件通用破解方式(animate cc,Photoshop cc,Flash cc)等

    破解之前准备工作: ①:安装好 试用版的 Adobe软件 ②:下载好破解软件: amtemu.v0.9.2-painter,下载地址:链接:http://pan.baidu.com/s/1nvNR74 ...

  10. Python之路-python介绍

    一.Python及其他语言 有很多种分类方法,其中一种是按照解释型和编译型来划分的. 编译型:例如C,C++ 优点:运行效率高 缺点:依赖编译平台 (不能跨平台,开发效率低) 解释型:例如shell, ...