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)

相关推荐

  • 刘福洋为什么退赛 ,为什么刘福洋退赛

    刘福洋近况如何呢?刘福洋是浙江歌舞剧团舞团的团长,而他是参加2013年《舞林争霸》而走红的,不仅仅是因为刘福洋在那当中的表现非常的好,而且原本有机会成为冠军的,却意外退赛了,很多网友对于刘福洋退赛一直有着争议,但是随着刘福洋对此事的回应,大家也就慢慢不再猜测他为什么会退出《舞林争霸》了。 刘福洋近期又走红了,因为他为《站在草原望北京》所编的舞蹈,真的非常的令…

    2023-06-05
  • 宽带拨号连接,宽带拨号连接被远程计算机终止

    《关于宽带拨号连接的深入探讨》 一、宽带拨号连接的基本概念我觉得宽带拨号连接就像是我们日常生活中去一个地方的方式一样。比如说,我们要去一个遥远的城市,可能会选择坐飞机或者坐火车。而在网络世界里,宽带拨号连接就是我们连接到互联网这个“大地方”的一种方式。也许它就像是一条专门为我们搭建的通往互联网的道路,通过这个连接,我们就能够获取到各种信息和服务。 它的工作原…

    2025-09-12
  • 太子妃升职记小说结局,太子妃终将逆袭

    近些天,有两部剧占据了话题榜。一个是刚刚落幕的《芈月传》,一个是莫名其妙就火起来的《太子妃升职记》。后者甚至凭借着“超级穷的剧组、超级多的槽点、正儿八经搞笑的架势”,势头直压前者。 对于一部剧的优劣,我是外行。我相信,任何受到大量关注的事物,都有它的道理。今日我想聊的,是两部剧不谋而合涉及到的类似规律,即亲密关系相处之道。 我们可以清楚看到,两部剧中的两位女…

    2023-06-06
  • 负载均衡和集群的区别,负载均衡集群的三种方式

    负载均衡和集群的区别 一、概念理解 负载均衡,从字面上看,好像是在平衡负载。它主要是将网络请求或计算任务均匀地分配到多个服务器上,以避免单个服务器负载过高而导致性能下降或故障。就好比一个班级的老师要把作业平均分配给几个课代表去批改,每个课代表的工作负担就比较均衡,不会出现某个课代表忙得要死,而其他课代表闲得没事干的情况。 集群呢,我觉得更像是一个团队。一群服…

    2025-10-18
  • 三星七寸手机,三星7寸手机:最新技术,大屏体验

    本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:PhoneTalk 市面上这么多款手机有没有你看到一眼后就有足够深刻的印象? 三星Galaxy S23 Ultra 三星Galaxy S23 Ultra相较于上一代边框曲率变得平滑,握持感更舒适,也方便S Pen的使用。整机散发着浓厚的商务外观,放到如今同质化严重的手机市场,依旧保持了极高的辨识度。…

    2023-05-16
  • android 5.1,Android 5.1.1是哪年出产

    以下是一篇关于“android5.1”的文章: 《探索Android5.1:从点滴到全面》 一、引言 在移动设备的发展历程中,Android5.1无疑是一个值得深入探究的版本。它或许不像一些后续的版本那样引起广泛的轰动,但却在当时的移动领域留下了深刻的印记。我对Android5.1一直充满了好奇,它究竟有哪些独特之处?又给用户和开发者带来了怎样的体验呢?让我…

    2025-09-25
  • 和彩云好用吗,彩云使用技巧:5步帮你快速上手

    今天你们那儿多少度? 被问到这个问题,最近大家应该都有话可说……或者无话可说,一张截图、两位飘红的数字、三天内不见降水的预报,足以说明一切。 所以嘘寒问暖就不必了,让我们开门见山——这次的一派,我们请来了成员遍布全国各地的少数派编辑部,让他们聊聊自己最近都在用什么 app 看天气。 P.S. 你用什么看天气呢?欢迎来一派一起晒图分享(带上温度的那种)。 @克…

    2023-05-12
  • ibm服务器引导盘,ibm服务器引导盘安装

    《关于ibm服务器引导盘的深入探讨》 一、什么是ibm服务器引导盘? 我觉得ibm服务器引导盘可能就像是服务器启动的一把钥匙吧。它在服务器启动过程中起着至关重要的作用,仿佛是开启服务器运行大门的关键开关。也许它就像是我们日常生活中打开电脑的启动盘一样,只不过在服务器这个更庞大、更复杂的系统中,引导盘的作用显得更为关键和专业。 它主要负责加载服务器的操作系统和…

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

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

    2025-09-18
  • 德国队VS匈牙利队 ,欧洲杯小组赛最后一轮

    北京时间6月24日凌晨3点,欧洲杯2020小组赛最后两场比赛同时打响!来自死亡之组F组的四支球队展开大战。分别是葡萄牙对阵法国,以及德国对阵匈牙利。 四支球队只有法国队提前出线,其他三队理论上都有出线的可能性。世界排名第2的法国2轮战罢1胜1平积4分,这场比赛想要稳住榜首位置,必须要力争拿下葡萄牙。对于葡萄牙来说,他们1胜1负积3分,因胜负关系劣势屈居第3,…

    2023-06-06 网络资讯
  • soapclient,soapclient调用webservice

    以下是一篇关于“soapclient”的文章: 一、什么是soapclient 也许你在接触一些特定的软件开发或网络通信领域时,会听到“soapclient”这个词汇。我觉得它可能是与SOAP(SimpleObjectAccessProtocol)协议相关的一个客户端工具或组件。SOAP是一种用于在网络上交换结构化信息的协议,它通常用于Web服务之间的通信。…

    2025-08-13
  • 雅安地震感想 你对雅安地震有什么看法

    就在昨天,四川雅安市芦山县发生6.1级地震,震源深度17千米;而在第一次地震过后三分钟又发生了第二次地震,雅安市宝兴县发生4.5级地震,震源深度18千米。不少位于四川、重庆地区的网友表示此次地震震感明显。 虽然预警的时间并不是非常长,但也为人们成功生还提供了不小的帮助,这短短的几秒钟就有可能拯救上千万的生命。 地震发生时,雅安太平中学教师任飞正在办公室备课。…

    2023-06-06