游戏客户端
是玩家唯一真正碰得到的部分。
选游戏引擎看的是游戏要在哪里运行,而不是名气。网页比较 Babylon.js,应用比较 Unity 和 Flutter Flame,桌面比较 Unity 和 Unreal。
想做什么,决定了该选什么
按顺序问三个问题。玩家从哪里拿到它——一个链接、,还是桌面商店?是 2D 还是 ?你现在已经能顺手写哪种语言?这三个答案通常只留下一个合理选项,剩下的就只是偏好之争了。
如果是第一个 ,网页赢的次数比人们以为的多。不用装东西,不用过审,一小时内就能把链接发给朋友。
游戏每秒要把同样的三件事重复几十遍
从方块下落的益智游戏到 赛车,每一款游戏都运行在之上。客户端每秒都要把同样的工作重复很多次。它读取玩家按了什么,更新世界(移动角色、判断有没有击中、加分),再画出一幅新画面。游戏循环每转一圈,就产生。在 60 下,一圈必须在约 内完成,所以慢的会表现为画面卡顿。
- 1 读取输入 哪些键正被按住,手指点在了哪里,手柄上的哪个按钮被按下。这里只读取,先不移动任何东西。
- 2 更新世界 按“速度 × 经过的时间”移动角色,施加重力,做,改变分数和计时器。游戏的规则就住在这里。
- 3 绘制画面 清空屏幕,把背景、和分数画在新的位置上。玩家只看得到这一步,所以别把游戏规则放进来。
在画面里跑来跑去的图片——角色、金币、子弹——叫作精灵。当两个精灵看不见的盒子(碰撞箱)重叠时,就算碰到了;每一帧都检查这件事,叫作碰撞检测。、、 这样的引擎会替你运行游戏循环,你只要填写更新这一步发生什么、要画什么。
x += speed * dt。这样在每台设备上,大家都以同样的速度移动。
告诉 你说的是游戏循环的哪一部分。例如:“在更新这一步,用帧间隔时间让玩家随方向键以每秒 200 像素移动,碰到墙就停下。在绘制这一步,把分数显示在左上角。”点明是哪一步,得到的代码就更小、更容易检查。
网页
一个链接,是游戏和玩家之间最短的距离。不用安装、不用过审,有的设备都能跑。
手机 App
换来商店分发、和,代价是排队过审和规则。
桌面
更大的屏幕、真正的输入设备,以及 。玩得久的游戏都住在这儿。
两个常见的误解
、Unity、Unreal、Flame 出现在这里,是因为值得了解,而不是 SONUB 采用了它们。