2作者: mdoliwa7 天前原帖
我在转述昨天的 Ask HN 帖子:https://news.ycombinator.com/item?id=43976045 每次看到这样的帖子,我都觉得自己应该多做笔记。我确实写了一些,但之后很少使用它们。 我很好奇,你们通常是如何处理自己的笔记的?它们在现实生活中对你们有什么帮助?
8作者: BSTRhino7 天前原帖
在过去的三年里,我一直在创建一种新的2D游戏编程语言,其多人游戏功能完全自动化。这个想法是,即使是对“远程过程调用”一无所知的人,只需设置 `maxHumanPlayers=5`,就可以制作一个多人游戏,而这一切“就能正常工作”。关键在于整个游戏模拟,包括所有并发线程,都可以以确定性方式执行,并为回滚网络代码进行快照。 通常,在编写多人游戏时,你需要关注“多人游戏的规则”,例如避免非确定性,或不修改客户端没有权限的实体,但这些对那些只想直接进入游戏制作的人来说实在太难了。因此,我的想法是,如果我们将多人游戏融入编程语言的底层结构中,可以使整个语言在多人游戏方面是安全的。在Easel中,整个世界是密封的——你无法做任何破坏多人游戏的事情,这意味着它非常适合那些只想制作游戏而不想学习网络知识的人。我见过有人在使用Easel编程的第一天就制作出多人游戏,因为基本上你不会出错。 这个项目中还有许多其他有趣的内容。它是用Rust编写并编译为WebAssembly,因为我认为网络的零下载特性是让许多人聚集在一起进行多人游戏的更好方式。网络连接通过Cloudflare Calls进行点对点传输,这意味着Cloudflare会汇总消息并减少客户端的带宽需求,从而使游戏能够容纳更多玩家。 我在创建这个语言时也受到我使用React的经验的启发,下面是一个让船只在失去生命值时从绿色变为红色的示例代码: ```plaintext with Health { ImageSprite(@ship.svg, color=(Health / MaxHealth).BlendHue(#ff6600, #66ff00)) } ``` 上述代码片段中有很多隐藏的魔法使其有效——它创建了一个异步协程,每次Health发送信号时都会循环,而ImageSprite由编译器隐式分配ID,以便每次循环时知道更新哪个。这一切让你可以在更高的抽象层次上工作,在我看来,使代码更易于理解。 谈到异步协程,我认为在其他游戏引擎中它们的使用不够,因为它们的生命周期与任何东西都没有绑定——这会带来一个风险,即它们可能超出其实体的生命周期而导致游戏崩溃。在Easel中,每个异步任务的生命周期与其实体相同,这就是我们称之为行为的原因。清晰的生命周期语义使得在Easel中安全地使用异步任务成为可能,这也是为什么Easel游戏通常由成千上万的并发执行的行为组成。在我看来,这使你的代码更加清晰易懂。 这只是个开始,还有更多内容可以讨论,过去三年是漫长的旅程,但我暂时就说到这里!我希望即使是那些对Easel的多人游戏功能不感兴趣的人,也能发现它是一个关于下一代游戏编程语言如何工作的有趣提案。 编辑器在你的网络浏览器中运行,且可以自由尝试,因此我非常希望看到更多人尝试制作一些游戏!点击“试试看”按钮打开示例项目,看看你是否能更改代码以完成README中列出的建议任务。
3作者: banrovegrie7 天前原帖
在从零开始启动一个大型项目或产品时,你们是如何防止自己被庞大的代码量或工作量所压倒的?<p>我有一个不好的习惯,就是试图通过估算自己一天能写多少代码来应对这种情况,并观察这种量随着时间的推移是如何累积的。这样,当你看到在两到三个月的时间里可以写出“x行代码”时,会让你觉得这段代码量足以完成项目。<p>我不确定这是否是处理事情的理想方式。