下载 App

有关《因果》的技术详解

精华修改于2025/11/0761 浏览技术交流
在《因果》中我使用了一系列不常用的思路来制作游戏,希望我现在的思路在以后还是有帮助
首先想分享的是碰撞检测
一般来说,进行碰撞检测常用的方案是碰撞体,即检测玩家是否与障碍物进行碰撞
在我上一个游戏《T.B.I》中使用的就是这种技术
另外说明一下,我使用的是h5技术(html+css+javascript)来制作游戏,目的是为了实现跨平台打包和分发,在pc端使用nw.js打包成exe,在移动端使用cordova打包成安装包
在js(javascript)中,对于div元素可以使用offset关键字来获取元素的各种属性,例如宽高,相较于父元素的绝对坐标,等等
在《T.B.I》中,对每一个障碍物增加一个“block”的类名,在加载场景的时候就获取包含“block”这个类名的所有元素,获得每一个元素的宽高和坐标并与与玩家的坐标进行判断
如果玩家的坐标位于任意一个障碍物的判定区域内,就判断为“被障碍挡住”,进而执行一系列的逻辑处理
方法是好方法,就是太麻烦了
使用这种碰撞体检测不仅需要手动创建元素,还要将其放进游戏场景进行微调
而且这种“摆放”不能预览,如果位置不合适只能在代码里进行微调后重新进入游戏场景查看
就,不太优雅
于是我将目光放在了canvas画布上
canvas画布算是万金油,如果有特效或其他效果一时间没法用常规的html结构实现,将重心放在canvas画布上准没错
canvas画布允许开发者直接在上面绘制像素,和渲染是一个思路,同时也允许直接在上面绘制图片
在《因果》中,我将游戏场景的布局在ps里直接绘制出来,然后将障碍物的部分标记为纯黑,然后将canvas画布平铺整个游戏场景,将场景图片绘制到canvas画布上
这时仅需要判断玩家的位置是否有黑色像素,如果玩家站在黑色像素上就判断为“被障碍物挡住”,进而执行其他逻辑
这样做的好处是可以预览整个游戏场景,且修改起来十分方便,基本上半个小时左右就可以完成一个小场景的制作和调试
在后期开发中还将这个障碍判定画布作为障碍物的阴影或底部来体现3d空间,算是开发《因果》时最用心的工作了
TapTap
注意观察障碍底部的阴影,不仅是3D效果的呈现,也是重要的碰撞判断条件
另外还发现喷溅的毒液会覆盖障碍物的黑色像素,达到了“场景破坏”的效果,但由于时间比较赶没有深入开发
接下来想分享的是敌人脚本加载
如果是在引擎上加载敌人脚本压根不是难事,但我使用的是js
在《T.B.I》中,我使用的是“中心管理”的方式,即在进入场景时就加载一个敌人脚本,这个脚本相当于“总指挥”,指挥每一个敌人应该干什么
但这种方式不能实现“动态添加敌人”的效果,只能在进入房间时就确定好每个敌人的序号,如果这时再加入一个敌人就会打乱获取敌人元素的顺序,整个场景就会变得不可控
但在《因果》中这个难题被解决了
在《因果》中,每一个敌人都有自己的脚本,即使用的是同一套动作模板
使用js的url参数可以区分不同敌人的脚本,在创建敌人的时候就将敌人的id作为url参数传进脚本文件的url中,这样就可以动态加载脚本文件了,基于此还制作了不停刷新敌人的无尽模式
TapTap
创建敌人的函数,六个参数分别为id名,类名,初始化图片路径,x坐标,y坐标,脚本路径
《因果》是我首次实现动态添加敌人的游戏,当我得知url参数居然能用在js文件的请求路径时,整个代码思路瞬间打开了
但问题仍然存在,在某些低端移动设备(oppo A5)上加载过多的敌人脚本就会发生卡顿,之前提到过的“总指挥”的方案只需要加载一个脚本
目前有一个折中的办法:每次加载一批敌人,清除一批后删除当前批的敌人脚本,然后加载新一批敌人和与之对应的脚本
但这就不能达到“动态添加”,只是分批加载而已
另外还有全向移动,子弹判定等技术细节,碍于篇幅就不在此一一列举了,日后可能会出额外篇幅详细说明
下面是《因果》的链接
猜你想搜
因果 游戏场景预览制作
分享超级简单的ai生图方法,来自8号秘事制作经验截图
分享超级简单的ai生图方法,来自8号秘事制作经验
分享超级简单的ai生图方法。来自8号秘事制作经验 在上个月的8号秘事开发过程中,由于大家都是社畜,平时没有太多的时间,美术们在画完主场景后,没有太多时间去画一些交代剧情的美术资源。 我自己就通过搜索找到了一个非常简单的ai生图的方法,速度快效率高,而且不用花钱。虽然最终效果一般,但是综合来说,这还是个时间性价比很高的方法。 一.操作方法(附上神秘代码) 下面我来介绍使用方法,首先进入chatgpt
21 赞
1 回复
开源一Unity小框架,高效单例与模块化设计,减少样板代码截图
开源一Unity小框架,高效单例与模块化设计,减少样板代码
ProjectBaseUnity 是一个轻量的 Unity 小框架 介是我根据过往学习和上班拉磨中写的小框架, 在GJ和小游戏中使用过 核心是高效的单例与模块化设计,可以少写样板代码。 面板管理、事件总线、资源加载、对象池、音频和数据存储都开箱即用, 几十分钟就能把原型跑起来,适合小型项目和game jam 的快节奏开发。 易改易扩展[心动小镇_点赞],保持灵活度的同时也有规范可依,既能快速搭建也
精华
15 赞
2 回复
08:41
纯使用AI制作RPG游戏经验分享-怪物部分截图
纯使用AI制作RPG游戏经验分享-怪物部分
这次聚光灯参赛作品是纯AI写代码做的 分享一下之前制作的零代码基础用AI做游戏的教程给大家 #聚光灯游戏开发心得接力 #TapTap聚光灯独立游戏
精华
14 赞
2 回复
游戏开发中的项目资源管理截图
游戏开发中的项目资源管理
我是狂猎世界的开发者,大家感兴趣的可以看看我们本次聚光灯开发的项目。 在游戏开发的过程中,不管是个人项目还是集体项目,长期项目还是短期项目,往往都会遇到资源管理问题。这是创作者不得不面对的一个问题。 很多人可能觉得对于个人项目来说资源并不需要得到有效的管理,但事实是个人项目随着开发时间的增长也会出现爆炸式的资源数量膨胀,尤其是UI等琐碎物品的增加会大大的增加资源管理的难度。在这里我将会抛砖引玉,与
13 赞
3 回复
<赛博诊所>开发复盘:目标、规则与思路截图
<赛博诊所>开发复盘:目标、规则与思路
经过21天的鏖战,终于在倒数第二天把最终版本提交上去了。最后在平台上把游戏从头测了一遍,没遇到什么大问题,才终于松了一口气。 趁着记忆还热乎,想着复盘一下,记录这段经历,也分享一些我的思考。 我们做的是一款赛博朋克风格的点触类解谜游戏。基础设定是玩家扮演一位医生,通过线上连接潜入病人潜意识,治疗病人因植入体引发的赛博精神病。 从团队优势出发 我们团队有6个人,大多数成员身兼两职。我是美术出身,最近
精华
7 赞
2 回复
【开发日志#1】分享几款游戏的制作方法截图
【开发日志#1】分享几款游戏的制作方法
到目前为止,参加比赛的游戏有《红树林》、《机动侠·X》、《2b青年的救赎2》、《俯瞰地球》、《宅萌博物馆2——AI绘画展》、《神域传说》、《育婴堂》。 《红树林》是一款3D恐怖游戏,主人公是一名幸存者,他偶然间跑入了一片森林,在暴雨和雷电的夹击下,他渴望生存…… 《红树林》的名字起源于我姑妈家隔壁的一家电影院,名字也叫“红树林”。游戏的场景使用了虚幻商城的限免素材,原素材还有一个开局画面,是红色的
13 赞
11 回复
gamejam新手指南#3截图
gamejam新手指南#3
⭐本节目录 一、新手队伍会遇到哪些坑 二、策划案怎么写 三、团队友好协作小妙招 (——论11人野队如何实现0争执,0划水,0跑路) 《gamejam新手全指南》系列将在每晚18:00左右更新,会充分结合资料、参赛者介绍以及个人参赛体验,内容比较详细,[表情_开心]请大家请根据需要按标题查找~欢迎大家在评论区讨论及提问!! #gamejam #TapTap聚光灯独立游戏 #发现好游戏 #游戏制作 #
19 赞
01:33
【聚光灯游戏推荐第三期】游戏荒?别划走!截图
【聚光灯游戏推荐第三期】游戏荒?别划走!
#发现好游戏 #平台跳跃 #猫 #人工智能 #推箱子 #反转 #发现好游戏 #聚光灯gamejam开发者日志 #聚光灯游戏开发心得接力
4 赞
独立游戏《误构》的美术复盘截图
独立游戏《误构》的美术复盘
—— 美术协作工作分享 想和大家分享我们最近一段密集开发期的美术制作经验。这段时间里,我们完成了一系列从2D手绘到3D场景的视觉构建,也积累了不少值得记录的协作心得。 一、风格定位:手绘质感 + 虚实交织的视觉语言 《误构》是一款充满梦境与现实交织感的游戏,因此在美术风格上,我们坚持保留手绘质感与3D场景+多贴图相结合,营造出一种既真实又幻妙的视觉体验。 2D 部分:主角动画、道具手绘(如云朵、小
精华
15 赞
2 回复
不写代码不画图,1人21天用AI开发游戏截图
不写代码不画图,1人21天用AI开发游戏
👋 这是一篇用AI开发游戏的教程贴,以作者我本次参加聚光灯比赛为例~ 阅读完,你将收获: AI对游戏开发助力的点在哪? 如何丝滑地使用AI来进行游戏开发? AI在游戏开发中的局限在哪? 目录: 游戏创意 💡:还是得靠“人脑” 游戏方案 🗺️:人类种“种子”AI让它“发芽” 开发阶段 👨‍💻:让AI“小步快跑” 美术设计 🎨:搞定“风格一致性” 游戏音效 🎵:AI的“代码电子音” 总结反思 🤔:AI
精华
8 赞
2 回复