flash游戏编程基础教程 ,flash游戏制作教程及代码

现在是添加玩家和 NPC 的时候了。 为此,您需要编写一个 Car 类。 它将有一个 Move() 方法,玩家可以使用该方法控制他的汽车。 NPC 的移动将通过 Update() 完成,它只是更改 Y 坐标。

class Car{ constructor(image, x, y) { this.x = x; this.y = y; this.image = new Image(); this.image.src = image; } Update() { this.y = speed; } Move(v, d) { if(v == “x”) //X-axis movement { this.x = d; //Offset // if(this.x this.image.width * scale > canvas.width) { this.x -= d; } if(this.x canvas.height) { this.y -= d; } if(this.y < 0) { this.y = 0; } } }}

让我们创建第一个要检查的对象。

var objects = [ new Car(“images/car.png”, 15, 10)]; //An array of game objectsvar player = 0; //the number of the object controlled by the player

现在您需要向 Draw() 函数添加一个用于绘制汽车的命令。

for(var i = 0; i < objects.length; i ){ ctx.drawImage ( objects[i].image, //Render image 0, //Initial X position in the image 0, //Initial Y-axis position in the image objects[i].image.width, //Image width objects[i].image.height, //Image height objects[i].x, //X-axis position on the canvas objects[i].y, //Y-axis position on the canvas objects[i].image.width * scale, //The width of the image on the canvas multiplied by the scale objects[i].image.height * scale //The height of the image on the canvas multiplied by the scale );}

在按下键盘时调用的 KeyDown() 函数中,您需要添加对 Move() 方法的调用。

function KeyDown(e){ switch(e.keyCode) { case 37: //Left objects[player].Move(“x”, -speed); break; case 39: //Right objects[player].Move(“x”, speed); break; case 38: //Up objects[player].Move(“y”, -speed); break; case 40: //Down objects[player].Move(“y”, speed); break; case 27: //Esc if(timer == null) { Start(); } else { Stop(); } break; }}

现在您可以检查渲染和控制。

flash游戏编程基础教程 ,flash游戏制作教程及代码

碰撞时什么都没有发生,但这将在以后修复。 首先,您需要确保删除视图中丢失的对象。 这是为了避免堵塞 RAM。

在 Car 类中,我们添加值为 false 的字段 dead,然后在 Update() 方法中对其进行更改:

if(this.y > canvas.height 50){ this.dead = true;}

现在您需要更改游戏的更新功能,替换与对象关联的代码:

var hasDead = false; for(var i = 0; i < objects.length; i ){ if(i != player) { objects[i].Update(); if(objects[i].dead) { hasDead = true; } }} if(hasDead){ objects.shift();}

如果您不移除物体,当生成太多汽车时,游戏将开始降低计算机速度。

游戏物体碰撞

现在您可以开始实施碰撞。 为此,请为 Car 类编写一个方法 Collide(),它将检查汽车的坐标:

Collide(car){ var hit = false; if(this.y car.y) //If the objects are on the same line horizontally { if(this.x this.image.width * scale > car.x && this.x < car.x car.image.width * scale) //If the objects are on the same line vertically { hit = true; } } return hit;}

现在我们需要在 Update() 函数中添加碰撞检查:

var hit = false; for(var i = 0; i < objects.length; i ){ if(i != player) { hit = objects[player].Collide(objects[i]); if(hit) { alert(“You crashed!”); Stop(); break; } }}

这是游戏中的内容

flash游戏编程基础教程 ,flash游戏制作教程及代码

碰撞时可以添加任何逻辑:

打开动画;

添加效果;;

删除对象;

健康状况的改变,等等。

所有这些都由开发人员自行决定。

结论

这是一个非常简单的游戏,但足以了解 JS 如何处理图形以及一般如何创建游戏。 您可以在 GitHub 存储库中找到图像和完整的游戏代码。

使用画布非常适合处理图形:它提供了很棒的功能并且不会过多地加载浏览器。 我们现在也有一个可用的 WebGL 库(示例和用法),它可以为您提供大量的性能和 3D 工作(canvas 无法做到这一点)。

理解 WebGL 可能很困难——也许相反,许多人对尝试 Unity 引擎更感兴趣,它知道如何编译项目以在浏览器中运行它们。

 

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/284174.html

(0)

相关推荐

  • 湖人123-108战胜鹈鹕 ,鹈鹕明天首发出战名单

    直播吧3月15日讯 鹈鹕今日坐镇主场迎战湖人,两支球队目前战绩一样均为33胜35负,目前两队分列西部第9和第10,因此这场比赛可谓是一场至关重要的卡位战。 首节开局湖人火力全开打出完美进攻,浓眉哥又是2 1又是三分进球独揽8分,加上比斯利和拉塞尔随后的三分进球,湖人轰出14-0的完美开局早早确立起领先,鹈鹕开场即崩盘完全不在状态,随后他们不管如何调整始终无法…

    2023-06-05
  • 新华保险公司保障您的财产安全

    近日,新华保险召开第八届董事会第一次会议,选举李全先生担任公司第八届董事会董事长(任职资格尚待中国银保监会核准)。 回顾2019至2022年第七届董事会期间,新华保险实现国企党的领导与公司治理相统一,积极服务国家战略,坚持高质量发展,不断巩固经营优势,夯实市场地位。 2019至2022年稳中有进 2019年底,公司第七届董事会提出“二次腾飞”的发展目标、“资…

    2023-06-06
  • tenprotect,tenprotect怎么卸载

    以下是一篇关于“tenprotect”的文章: 《关于“tenprotect”的探索与思考》 一、初识“tenprotect” 当我第一次接触到“tenprotect”这个词汇时,我心中充满了疑惑和好奇。它似乎是一个不太常见的名词,也许是某类特定领域或产品的名称?我开始在脑海中搜索与之相关的信息,但似乎并没有立即找到明确的答案。 我觉得它可能与某种技术或防护…

    2025-07-30
  • aspnet虚拟主机,httpd 虚拟主机

    《关于aspnet虚拟主机的探索与思考》 一、aspnet虚拟主机的基本概念 aspnet虚拟主机可能是一种基于aspnet技术构建的网络服务器环境。它就像是一个为网站提供居住空间的地方,让网站能够在互联网上展示和运行。我觉得它有点像我们生活中的一个小房间,只不过这个房间是在网络世界里,用来存放和展示网站的各种内容。 在aspnet虚拟主机中,服务器会运行a…

    2025-09-18
  • jjg钓鱼大赛,【攻略】参加jjg钓鱼大赛的技巧与窍门

    小编今天给大家带来的是明日之后夏日祭钓鱼大赛玩法攻略大全,明日之后最新上线的夏日祭钓鱼大赛应该怎么玩呢?又有什么奖励呢?小编给大家帮忙整理了一下,感兴趣的玩家朋友们可千万不要错过哦!快来跟小编一起往下看看吧! 明日之后夏日祭钓鱼大赛玩法攻略大全 【参加方式】 在夏日祭钓鱼大赛页面进入渔场,寻找阿莱克希亚选择渔点进行报名。 参赛时间为每天中午12点到14点,晚…

    2023-05-13
  • 中方召回驻立陶宛大使的决定,变脸速度很快的人性格

    近一段时间,立陶宛政府不顾中方反复交涉、晓以利害,宣布允许**当局以“**”名义设立“代表处”。此举公然违背中立两国建交公报精神,严重损害中国主权和领土完整。中国政府对此表示坚决反对,决定召回中国驻立陶宛大使,并要求立政府召回驻中国大使。 中方正告立方,世界上只有一个中国,中华人民共和国政府是代表全中国的唯一合法政府。一个中国原则是公认的国际关系准则和国际社…

    2023-06-03
  • 阿里云个人邮箱,阿里云个人邮箱smtp服务器地址

    《阿里云个人邮箱:全面解析与使用指南》 一、阿里云个人邮箱的基本概念 阿里云个人邮箱,也许可以理解为是阿里云为个人用户提供的一款电子邮件服务。它就像是我们日常生活中使用的纸质信件的电子版本,通过网络进行传输和接收。我觉得它的出现,为我们的日常沟通和信息交流提供了更加便捷、高效的方式。 在互联网时代,电子邮件已经成为了人们不可或缺的一部分。无论是工作中的商务邮…

    2025-08-19
  • http 错误 403 – 禁止访问,403禁止访问怎么办

    《关于“http错误403-禁止访问”的深入探讨》 一、错误403的基本概念http错误403是在网络访问过程中经常遇到的一种状态码,它表示服务器拒绝了客户端的访问请求。也许这就像是你去一个地方,明明看起来可以进入,但却被门口的保安拦住了,告诉你不能进去。这种禁止访问的情况可能会让我们感到困惑和无奈,不知道到底是哪里出了问题。 二、可能导致403错误的原因1…

    2025-09-28
  • php虚拟空间,php虚拟空间做中转数据

    《关于php虚拟空间的探索与理解》 一、什么是php虚拟空间? 也许在很多人眼中,php虚拟空间就像是一个神奇的“盒子”,它为我们的php程序提供了一个运行的环境。我觉得它就像是一个虚拟的小房间,里面有各种必要的设施和资源,让我们的php代码能够在这里安家落户,并且顺利地执行。 就好比我们在现实生活中搭建一个网站,需要有服务器、数据库等各种组件。而php虚拟…

    2025-07-29
  • 奥丹姆任务线从哪开始, 什么是奥丹姆任务

    《魔兽世界怀旧服》奥丹姆的线索怎么做?铁炉堡是矮人的都城,这里生活着矮人和侏儒,这两个种族都非常的热情好客,作为联盟王国的另一大中央都城,这里的任务也十分繁多,其任务网遍布整个大陆。那么任务奥丹姆的线索该怎么完成呢? 《魔兽世界怀旧服》奥丹姆的线索任务攻略 任务需求 与铁炉堡探险者大厅中的史学家卡尼克谈一谈。 任务描述 你好,很高兴再一次见到你!你在奥达曼的…

    2023-06-06
  • 第三方recovery,第三方recovery下载官网

    《第三方recovery的全面解析》 一、什么是第三方recovery 第三方recovery也许可以理解为是在手机系统之外的一种特殊的恢复模式。它就像是手机系统的一个“急救站”,能够在手机出现各种问题时,帮助我们进行一些修复和恢复操作。 比如说,当我们的手机系统出现故障,无法正常启动或者出现各种错误提示时,第三方recovery可能会提供一些选项,让我们能…

    2025-10-01
  • 周五收盘价和周一开盘价,今天股市放量下跌

    周五早盘股指小幅低开后一路下跌,截止收盘,沪指跌73点,跌幅2.48%,报收2882点,再次失守2900点关口。深市三大股指跌幅均在3%左右,创业板一度下跌近4%,基本全部回吐本次反弹点位。两市共成交5700多亿,比前两日放大明显。 板块方面,除了种业、人造肉等极少数品种外,几乎全线下跌,燃料电池重挫,多只个股跌停,工业大麻、证券、互联网、环保、汽车等跌幅居…

    2023-06-06