20251105

news/2025/11/5 19:55:28/文章来源:https://www.cnblogs.com/Leesz/p/19194500
今天晚上稍微试着把攻击做出来了,也就是说按 'z' 可以攻击了,具体的攻击模块和怪物机制等到明天再做吧,完善以后的代码如下:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<style>body {margin: 0;overflow: hidden;}
</style><body><canvas id="Canvas" style="border:1px solid #000000;"></canvas>
</body>
<script>//初始化画布
  const canvas = document.getElementById('Canvas');canvas.width = window.innerWidth;canvas.height = window.innerHeight;canvas.style.backgroundColor = '#000000';const ctx = canvas.getContext('2d');//定义游戏对象数组
  const grounds = [];const monsters = [];//定义玩家类
  class Player {hp = 10;x = Math.round(canvas.width / 2);y = Math.round(canvas.height / 2);width = 20;height = 20;color = '#FF0000';speedX = 0;speedY = 0;a = 0.05;g = 0.1;maxSpeedX = 3;maxSpeedY = 3;status = {up: false,down: false,left: false,right: false,landing: false,toward: 'right',attacking: false,}damage = {at: 1,width: 80,height: 40,}//攻击方法
    attack(monster) {}//跳跃方法
    jump() {this.speedY = -5;this.status.landing = false;}//碰撞检测方法
    crush(ground) {if (ground.y - (this.y + this.height) <= 0 && ground.y - (this.y + this.height) >= -this.speedY)return true;elsereturn false;}}//定义地面类
  class Ground {x = 0;y = 0;width = 0;height = 0;color = '#654321';constructor(x, y, width, height) {this.x = x;this.y = y;this.width = width;this.height = height;}}//定义怪物类
  class Monster {hp = 5;at = 1;x = 0;y = 0;width = 20;height = 20;color = '#00FF00';}//创建玩家与地面对象
  const p = new Player();const ground1 = new Ground(0, Math.round(canvas.height - 100), Math.round(canvas.width), 100);grounds.push(ground1);//键盘事件监听//1.按下按键
  document.addEventListener('keydown', function (event) {switch (event.key) {case 'ArrowUp':if (p.status.landing == true)p.jump();break;case 'ArrowDown':p.status.down = true;break;case 'ArrowLeft':p.status.left = true;p.status.toward = 'left';break;case 'ArrowRight':p.status.right = true;p.status.toward = 'right';break;case 'z' || 'Z':p.status.attacking = true;break;}});//2.松开按键
  document.addEventListener('keyup', function (event) {switch (event.key) {case 'ArrowUp':break;case 'ArrowDown':p.status.down = false;break;case 'ArrowLeft':p.status.left = false;break;case 'ArrowRight':p.status.right = false;break;}});//3.c键查看玩家状态
  document.addEventListener('keydown', function (event) {if (event.key === 'c' || event.key === 'C') {console.log("玩家状态:", p);}});//动画循环function animate() {ctx.clearRect(0, 0, canvas.width, canvas.height);//玩家运动
    p.x += p.speedX;p.y += p.speedY;//绘制陆地与碰撞监测
    grounds.forEach(Ground => {//绘制陆地
      ctx.fillStyle = Ground.color;ctx.fillRect(Ground.x, Ground.y, Ground.width, Ground.height);//碰撞监测if (p.crush(Ground)) {p.y = Ground.y - p.height;p.status.landing = true;}});//重力作用if (p.status.landing == false) {p.speedY += p.g;if (p.speedY > p.maxSpeedY)p.speedY = p.maxSpeedY;} else {p.speedY = 0;}//水平无操作时水平减速if ((p.status.left == false && p.status.right == false) || (p.status.left == true && p.status.right == true)) {if (p.speedX > 0) {p.speedX -= p.a;if (p.speedX < 0) p.speedX = 0;} else if (p.speedX < 0) {p.speedX += p.a;if (p.speedX > 0) p.speedX = 0;}}//水平加速度操作速度if (p.status.left) {p.speedX -= p.a;if (p.speedX < -p.maxSpeedX) p.speedX = -p.maxSpeedX;}if (p.status.right) {p.speedX += p.a;if (p.speedX > p.maxSpeedX) p.speedX = p.maxSpeedX;}//绘制玩家
    ctx.fillStyle = p.color;ctx.fillRect(p.x, p.y, p.width, p.height);//绘制攻击范围if (p.status.attacking) {ctx.fillStyle = '#FFFF00';if (p.status.toward == 'right') {ctx.fillRect(p.x + p.width, p.y + (p.height - p.damage.height) / 2, p.damage.width, p.damage.height);}else if(p.status.toward == 'left'){ctx.fillRect(p.x - p.damage.width, p.y + (p.height - p.damage.height) / 2, p.damage.width, p.damage.height);}p.status.attacking = false;}requestAnimationFrame(animate);}animate();
</script></html>

 

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

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

相关文章

最小偏向角说明

很无聊的东西。很无聊的东西,因为细致且严谨的证明是 trivial 的,在此只是给一个大概的说明。 我们假设入射角 \(i\),折射角 \(r\),而三棱镜另一面的入射角为 \(r\),出射角为 \(i\);另外,顶角为 \(\alpha\)。 几…

OpenCSG 与汇付天下共启支付+开源新时代:2025 斗拱开发者大会圆满落幕

2025 年 10 月 24 日,OpenCSG 荣幸受邀出席由汇付天下主办的“斗拱开发者大会”。本次大会聚焦支付、开源、AI 及开发者生态建设。作为大会的重要战略合作方,OpenCSG 在大会上与汇付天下完成签约,活动顺利完成,标志…

smartproxy API 代理——控制平面 + 策略治理

面向中大型技术团队与企业技术决策者,以”控制平面+策略治理”为核心架构,提供统一接入、统一治理、统一可观测的 API 代理能力。我们将稳定性与性能作为首要目标,帮助团队在全球多区域场景下显著提升交付效率与运营…

gcc如何传递C/C++函数的聚合类参数

gcc如何传递C/C++函数的聚合类参数intro 通常C/C++中函数一般不会直接传递一个结构,更多处于性能考虑都会传递一个const类型的结构引用/指针。但是既然语言本身支持这种语法功能,编译器必定就要有对应的实现/规范/标…

31

所学时间:9小时 博客量:1 代码量:1百 所学知识:软件设计实验5:建造者模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解建造者模式的动机,掌握该模式的结构; 2、能够利用建造者模式解决实…

deepseek-ocr部署

deepseek-ocr部署部署环境 24GB显存+Ubuntu22 依赖 torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118 transformers==4.46.3 tokenizers==0.20.3 einops addi…

TiDB数据库从零开始

TiDB数据库从零开始 学习地址:……/s/1yvdOI3R3yT-zL5b4xfQsRg 提取码:3w36 在数字化浪潮席卷全球的今天,数据已成为企业的核心资产。传统单机数据库在面对海量数据和高并发场景时逐渐力不从心,分布式数据库应运而…

锁定缓冲区的概念

锁定缓冲区的概念我们通常所说的Cache是高速缓存,它位于CPU和主内存之间,用于加速内存访问。但是,Cache的内容通常是易失的,而且其行为对软件来说是透明的(即由硬件自动管理)。然而,在某些体系结构中,比如龙芯…

【UEGamePlay】- 3C篇(一) : 输入

前言 本系列想基于技术策划的角度去入手整个文章,包含剖析UE原生的3C实现,以及在实际工程中,我们需要将哪些需求转换为能够实际落地的数据以便和设计蓝图对接,以及在前期如何快速出原型。 文章不会讨论所有3C的表现…

Ubuntu下安装Nvidia驱动CUDAgpu_burn的一些步骤注意事项错误修复

1.下载安装系统,本文以25.04为例 2.安装vim apt-get install vim 3.更换国内源 1)sudo vim /etc/apt/sources.list.d/ubuntu.sources 2)将原本内容注释,并将以下内容复制进去Types: deb URIs: https://mirrors.ali…

郑州西亚斯学院举办智能体创新大赛

这是郑州西亚斯学院智能体创新大赛的示例文件,如果你看到这个信息,说明这个文件的内容已经正常发送。

JavaWeb02-Maven

1.MavenMaven是专门用于管理和构建Java项目的工具,它的主要功能有:提供了一套标准化的项目结构 提供了一套标准化的构建流程(编译,测试,打包,发布......) 提供了一套依赖管理机制标准化的项目结构标准化的构建流…

NOIp模拟2 模拟退火 笔记

正好昨天学了模拟退火,就来写个笔记…… 模拟退火,顾名思义就是模拟退火(看不懂不用担心,模拟退火和退火关系不大……)。 啥意思? 借用哦哎wiki上的图: ; 其实就是随机改变当前方案,根据答案是否增加决定是否真…

课后作业(异常捕获)

java中的异常捕获语句 Try{ //可能发生运行错误的代码; } catch(异常类型 异常对象引用){ //用于处理异常的代码 } finally{ //用于“善后” 的代码 } 将可能发生异常的代码放进try语句中,程序检测到发生异常时…

UEFI 启动的各阶段介绍 - 阿源

UEFI启动的七个阶段介绍系统固件开发学习系列: 一、EDKII环境搭建 & QEMU虚拟机双平台安装 二、EDKII工程结构介绍目录 一、整体概念 二、SEC 安全初始化阶段 三、PEI 预 EFI 初始化阶段 四、DXE—驱动执行环境阶…

CSP 2025 游记总结

T1 大约开考 40 min 后做出,有点慢了。 反悔贪心,按照每个人最大的满意度与次大值的差为第一关键字,次大值与最小值的差为第二关键字从大到小排序,然后挨个取就行了。 期望得分:\(100\)点击查看代码 #include<…

在AI技术快速实现创意的时代,挖掘用户真实需求成为制胜关键——某知名macOS防睡眠工具需求洞察

本文基于某知名macOS防睡眠工具的文档和用户反馈分析,揭示了用户在使用过程中提出的核心需求,包括连接电源自动激活、外接显示器检测优化、图标显示改进等关键功能改进建议,为产品迭代提供重要参考。a.内容描述核心…

2025 年 11 月重型货架厂家推荐排行榜,模具/高位/阁楼/平台/仓储/冷库/定制/立体库/智能/窄巷道/钢平台/抽屉/悬臂/穿梭车/搬运机器人/天金冈货架公司精选

2025年11月重型货架厂家推荐排行榜:模具/高位/阁楼/平台/仓储/冷库/定制/立体库/智能/窄巷道/钢平台/抽屉/悬臂/穿梭车/搬运机器人/天金冈货架公司精选 一、行业背景与发展趋势 随着现代物流体系的不断完善和智能制造…