超级马里奥

news2024/11/15 9:21:00

欢迎来到程序小院

超级马里奥

玩法:点击鼠标左键进行马里奥跳跃,带着马里奥跳跃不同的障碍物,统计分数,快去玩变态超级玛丽吧^^。

开始游戏icon-default.png?t=N7T8https://www.ormcc.com/play/gameStart/193

html

<canvas id="gamescene"></canvas>

css

  #game_div.horizontal{width:680px; height:480px;}
  .horizontal #start{background:transparent; width:680px; height:460px;}
  .horizontal #start .title{margin:15px auto 15px;}
  .horizontal #play{background:transparent; width:680px; height:300px;}
  .horizontal #end{width:680px; height:400px;}
  .horizontal #footer{bottom:0;}

js

var P = function(canvas, size, procedure) {
 var self = this;
 self.debug = true;
 self.width = size.width;
 self.height = size.height;
 self.director = new P.Director;
 self.loader = new P.Loader;
 self.root = new P.Group(this);
 self.ctx = document.getElementById(canvas).getContext('2d');
 self.camera = new P.Camera(this);
 self.pe = new P.Physics(this);
 self.other = {};
 self.other = {};
 procedure.preload && procedure.preload(this);
 self.loader.waitForComplete(P.Util.proxy(function() {
  procedure.init && procedure.init(this);
  procedure.start && procedure.start(this);
  self.render(self.ctx);
 }, this));
}
P.prototype.render = function(ctx) {
 var self = this;
 P.Util.setIntervalWithTimeout(function() {
  ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height); 
  self.camera.update();
  self.renderTree(self.root, ctx);
 }, 1000/60);
}
P.prototype.renderTree = function(node, ctx) {
 if (node.img) {
  if (node.stype == "normal") {
   var x = node.x - (this.camera.x);
   var y = node.y - (this.camera.y);
   ctx.drawImage(node.img, 0+node.width*node.frame, 0, 
      node.width, node.height, x, y, node.width, node.height);
  } else if (node.stype == "repeat-x") {
    var x = node.x;
    var y = node.y - (this.camera.y);
    var startX = (this.camera.x>node.x)
       ? ((node.x-this.camera.x) % node.width)
       : (-(node.width+(this.camera.x-node.x)%node.width));
    var number = Math.ceil((this.width-startX)/node.width);
    for (var i = 0; i < number; i++) {
     ctx.drawImage(node.img, startX+i*node.width, y);
    }
  } else if (node.stype == "repeat-x-rect") {
   var pattern = ctx.createPattern(node.img, "repeat-x");
   ctx.fillStyle = pattern;
   ctx.fillRect(0, 0, this.width, this.height);
  } else if (node.stype == "group") {
  }
 }
 for (var x in node.children) {
  this.renderTree(node.children[x], ctx);
 }
}
// P.Camera
P.Camera = function(game) {
 this.x = 0;
 this.y = 0;
 this.padding = {
  top: 0
  ,right: 0
  ,bottom: 0
  ,left: 0
 };
 this.player = null;
 this.game = game;
}
P.Camera.prototype.follow = function(player, playerPosition, stype, options) {
 this.player = player;
 this.playerPosition = playerPosition;
  this.stype = stype;
 if (stype == "padding") {
  this.padding = options;
  var width = this.game.width - options.left - options.right;
  var height = this.game.height - options.top - options.bottom;
  this.x = player.x-(width*playerPosition.x+options.left);
  this.y = player.y-(height*playerPosition.y+options.top);
 } else if (stype == "viewport") {
  this.viewport = options;
  this.x = player.x-(options.width*playerPosition.x+options.x);
  this.y = player.y-(options.height*playerPosition.y+options.y);
 }
}
P.Camera.prototype.update = function() {
 if (this.player) {
  if (this.stype == "padding") {
   if (this.player.x < this.x+this.padding.left) {
    this.x += this.player.x - (this.x+this.padding.left);
   } else if (this.player.x > this.x+this.game.width-this.padding.right) {
    this.x += this.player.x - (this.x+this.game.width-this.padding.right);
   } 
   if (this.player.y < this.y+this.padding.top) {
    this.y += this.player.y - (this.y+this.padding.top);
   } else if (this.player.y > this.y+this.game.height-this.padding.bottom) {
    this.y += this.player.y - (this.camera.y+this.game.height-this.padding.bottom);
   } 
  } else if (this.stype == "viewport") {
   if (this.player.x < this.x+this.viewport.x) {
    this.x += this.player.x - (this.x+this.viewport.x);
   } else if (this.player.x > this.x+this.game.width-
      (this.game.width-this.viewport.x-this.viewport.width)) {
    this.x += this.player.x - (this.x+this.game.width-
        (this.game.width-this.viewport.x-this.viewport.width));
   } 
   if (this.player.y < this.y+this.viewport.y) {
    this.y += this.player.y - (this.y+this.viewport.y);
   } else if (this.player.y > this.y+this.game.height-
      (this.game.height-this.viewport.y-this.viewport.height)) {
    this.y += this.player.y - (this.camera.y+this.game.height-
        (this.game.height-this.viewport.y-this.viewport.height));
   } 
  }
 }
}
P.Physics = function(game) {
 this.game = game;
 this.loop = null;
 this.gravity = 0;
 this.children = {};
 this.isRunning = false;
}
P.Physics.prototype.start = function() {
 var self = this;
 self.isRunning = true;
 self.loop = P.Util.setIntervalWithTimeout(function() {
  self.update();
 }, 1000/60);
}
P.Physics.prototype.stop = function() {
 P.Util.clearIntervalWithTimeout(this.loop);
 this.loop = null;
 this.isRunning = false;
}

源码icon-default.png?t=N7T8https://www.ormcc.com/

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试( 基础篇)

前言 从这篇博文开始&#xff0c;我们将作为一名刚刚加入测试团队的菜鸟&#xff0c;开始一次测试之旅。 在这里我们将讨论以下问题&#xff1a; 软件测试的生命周期 如何描述一个bug 如何定义bug的级别 bug的生命周期 产生争执怎么办 软件测试的生命周期 先回顾一个点&#…

TortoiseSVN安装与配置教程:使用内网穿透实现公网提交文件到本地SVN服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

SpringBoot整合redis实现过期Key监控处理(最简单模式)

前言&#xff1a;写这篇文章的目的主要是这方面的知识我是第一次实际运用到&#xff0c;在项目里面有个功能&#xff0c;需要登录的时候根据手机号发送短信验证码&#xff0c;我看了公司的代码是用redis过期key监控实现的&#xff0c;由于之前没有接触过这类&#xff0c;现在写…

Java CC 解析 SQL 语法示例

示例&#xff1a;SimpleSelectParser 解析 select 11; 输出 2&#xff1b; 0&#xff09;总结 编写 JavaCC 模板&#xff0c;*.jj 文件。 编译生成代码文件。 移动代码文件到对应的包下。 调用生成的代码文件。 1&#xff09;JavaCC 模板 main/javacc/SimpleSelectParse…

C# Socket通信从入门到精通(3)——单个异步TCP客户端C#代码实现

前言: Socket通信中有tcp通信,并且tcp有客户端,tcp客户端程序又分为同步通信和异步通信,所谓同步通信其实就是阻塞式通信,比如客户端调用接收服务器数据函数以后,如果服务器没有发送数据给客户端,则客户端程序会一直阻塞一直到客户端接收到服务器的数据为止;所谓异步通…

电脑文件加密软件

天锐绿盾电脑文件加密软件是一款专业的信息安全防泄密软件。该软件基于核心驱动层的透明加密软件&#xff0c;为企业提供信息化防泄密一体化方案&#xff0c;不改变操作习惯&#xff0c;不降低工作效率&#xff0c;实现数据防泄密管理。 PC访问地址&#xff1a; https://isite…

Redis incr实现流水号自动增长

文章目录 问题描述&#xff1a;实现思路代码案例 问题描述&#xff1a; Java项目实现流水号自动增长&#xff0c;项目需求中有时需要生成一定规则递增编号&#xff1a; eg用户编码自动生成&#xff0c;规则&#xff1a;user7位数字&#xff0c;每次新增自增长&#xff0c;例&…

Nginx安装配置项目部署然后加SSL

个人操作笔记记录 第一步&#xff1a;把 nginx 的源码包nginx-1.8.0.tar.gz上传到 linux 系统 第二步&#xff1a;解压缩 tar zxvf nginx-1.8.0.tar.gz 第三步&#xff1a;进入nginx-1.8.0目录 使用 configure 命令创建一 makeFile 文件。 直接复制过去运行 ./configur…

考过PMP之后,要不要继续学CSPM?

在7年前拿下了PMP证书&#xff0c;但又在今年报名了CSPM中级的学习&#xff0c;身边很多人都疑问&#xff0c;为什么还要继续花钱考一个新出的证书&#xff1f;是不是闲的没事干&#xff1f;下面跟大家说下我的想法&#xff0c;仅作参考。 1&#xff09;了解项目管理行业的新动…

OpenCV视频车流量识别详解与实践

视频车流量识别基本思想是使用背景消去算法将运动物体从图片中提取出来&#xff0c;消除噪声识别运动物体轮廓&#xff0c;最后&#xff0c;在固定区域统计筛选出来符合条件的轮廓。 基于统计背景模型的视频运动目标检测技术&#xff1a; 背景获取&#xff1a;需要在场景存在…

【Python微信机器人】第二篇:将python注入到其他进程

目录修整 目前的系列目录(后面会根据实际情况变动): 在windows11上编译python将python注入到其他进程并运行使用C写一个python的pyd库&#xff0c;用于实现inline hookPython ctypes库的使用使用ctypes主动调用进程内的任意函数使用汇编引擎调用进程内的任意函数(为了调用不遵…

pdf误删恢复如何恢复?分享4种恢复方法!

如何将pdf误删恢复&#xff1f;使用电脑的时候&#xff0c;经常会需要使用到pdf文件&#xff0c;但是有时候&#xff0c;因为一些操作上的失误&#xff0c;我们会丢失一些重要的文件。如果你不小心将pdf误删了&#xff0c;该如何进行恢复呢&#xff1f; PDF文件丢失的原因可以…

Bertopic 运行中报错记录

1、下载模型报错ConnectionError: (ProtocolError(‘Connection aborted.’, ConnectionResetError(54, ‘Connection reset by peer’)) 运行代码&#xff1a; topics, probabilities model.fit_transform(docs)报错内容&#xff1a; ConnectionError: (ProtocolError(‘C…

【Unity】渲染性能开挂GPU Animation, 动画渲染合批GPU Instance

GPU Instance和SRP Batcher合批渲染只对静态MeshRenerer有效&#xff0c;对SkinMeshRenderer无效。蒙皮动画性能堪忧&#xff0c;对于海量动画物体怎么解决呢&#xff1f;针对这个问题&#xff0c;GPU Animation就是一个常见又简单的解决方案。 GPU动画实现原理&#xff1a; …

【深圳1024开发者城市聚会定向征文】

在这个周末&#xff0c;我有幸参加了1024程序员节活动&#xff0c;这是一个专门为程序员们举办的活动&#xff0c;旨在庆祝程序员这个特殊的群体。在这个活动中&#xff0c;我不仅感受到了浓厚的编程氛围&#xff0c;还收获了许多宝贵的经验和知识。 活动在深圳湾科技生态园举…

漏洞复现--金和OASQL注入

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

坚固可靠的多合一轨道交通天线让您的赏秋路途不再枯燥

今年的法定节假日余额已清零&#xff0c;虽然国庆已过&#xff0c;但秋天正是出游的大好时节。在出游计划中&#xff0c;首先面临的就是交通工具的选择这个大难题&#xff0c;到底是选择自由度更高的自驾前往&#xff1f;还是更省心的公共交通&#xff1f;高铁上的信号质量依旧…

ATA-5510前置微小信号放大器在半导体测试中的具体应用

在现代电子技术领域&#xff0c;半导体器件的测试是非常重要的一环。而前置微小信号放大器在半导体测试中扮演着至关重要的角色。本文将介绍前置微小信号放大器在半导体测试中的原理和应用。 在半导体测试中&#xff0c;通常需要测试非常微弱的信号&#xff0c;这些信号可能受到…

大数据分析平台Splunk Enterprise结合cpolar实现公网远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…

福建泉州航海快艇蓝光三维扫描全尺寸测量船只外观设计三维建模-CASAIM中科广电

造船行业是一个与全球经济发展密切相关的关键行业。近年来&#xff0c;随着全球经济的快速发展&#xff0c;造船行业也不断进步和发展。快艇制造业作为小型、快速的船只的产业&#xff0c;所生产的船只通常用于娱乐、旅游、商业等方面&#xff0c;因此这种类型的快艇对于外观设…