- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我读过有关 FRP 的文章,感到非常兴奋。它看起来很棒,所以你可以编写更多高级代码,一切都更可组合,等等。
然后我尝试用从普通 js 到 Bacon 的几百个 sloc 重写我自己的小游戏。
而且我发现,与其编写仅包含高级逻辑的代码,我实际上击败了 Bacon.js 及其对原则的遵守。
我遇到了一些主要干扰干净代码的头痛
.take(1)
与其获取值(value),不如创建丑陋的结构。
有时他们应该符合逻辑。但是在 FRP 中实现它是可怕的
即使是 bacon.js 的创建者也有 troubles与它。
这里的例子是演示问题的代码和平:
任务是不允许两个玩家呆在同一个地方
用 bacon.js 实现
http://jsbin.com/zopiyarugu/2/edit?js,console
function add(a) {return function(b){return a + b}}
function nEq(a) {return function(b){return a !== b}}
function eq(a) {return function(b){return a === b}}
function always(val) {return function(){return val}}
function id(a){return a}
var Player = function(players, movement, initPos){
var me = {};
me.position = movement
.flatMap(function(val){
return me.position
.take(1)
.map(add(val))
})
.flatMap(function(posFuture){
var otherPlayerPositions = players
.filter(nEq(me))
.map(function(player){return player.position.take(1)})
return Bacon
.combineAsArray(otherPlayerPositions)
.map(function(positions){
return !positions.some(eq(posFuture));
})
.filter(id)
.map(always(posFuture))
})
.log('player:' + initPos)
.toProperty(initPos);
return me;
}
var moveA = new Bacon.Bus();
var moveB = new Bacon.Bus();
var players = [];
players.push(new Player(players, moveA, 0));
players.push(new Player(players, moveB, 10));
moveA.push(4);
moveB.push(-4);
moveA.push(1);
moveB.push(-1);
moveB.push(-1);
moveB.push(-1);
moveA.push(1);
moveA.push(-1);
moveB.push(-1);
我要演示的是:
me.positions
有自己的依赖可能我错过了一些基本的东西。也许我的实现不是 FRP 风格?
也许这段代码看起来不错,只是不习惯新的编码风格?
还是这个众所周知的问题,我应该选择万恶之源?所以像描述的那样 FRP 的问题,或者 OOP 的问题。
最佳答案
在尝试使用 Bacon 和 RxJs 编写游戏时,我也有过类似的经历。具有独立性的事物(如玩家的位置)很难以“纯 FRP”方式处理。
例如,在我早期的 Worzone 游戏中,我包含了一个可变的 targets可以查询玩家和怪物位置的对象。
另一种方法是像 Elm 人员那样做:将完整的游戏状态建模为单个属性(或 Elm 中称为信号),并根据该完整状态计算下一个状态。
到目前为止,我的结论是 FRP 不太适合游戏编程,至少在“纯粹”的方式上是这样。毕竟,对于某些事情,可变状态可能是更可组合的方法。在一些游戏项目中,例如 Hello World Open 赛车,我使用了可变状态,例如用于存储状态的 DOM 和用于传递事件的 EventStreams。
因此,Bacon.js 不是 Elixir 。我建议你自己弄清楚,哪里应用FRP,哪里不应用!
关于javascript - 与玻璃钢战斗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563960/
以下是有关战列舰及其参与的战斗的架构: Ships(name, yearLaunched, country, numGuns, gunSize, displacement) Battles(shi
我花了一个非常令人沮丧的晚上试图获得 wxpython在我的 MacBook Pro 上工作(运行 Snow Leopard 10.6.6)。通过阅读此处和其他网站上有关此主题的各种主题,这是我迄今为
这是一个关于战列舰和他们参加的战斗的模式: Ships(name, yearLaunched, country, numGuns, gunSize, displacement) Battles(s
您好,我正在尝试将 Jasper (4.0.2) 报告与 JBoss 6 一起使用,并使用 XML 文件作为数据源。然而,所需的库 JAR 存在相当多的重叠,并且由于我无法排除 JBoss 库,所以我
我有两个 相互重叠的元素,例如: ------------- | | | A | | | | ------------ |
我看过一些专门介绍 hasOwnProperty 的帖子,但我仍然质疑是否(以及何时)应该在简单的 obj.prop 上使用它 if (obj.hasOwnProperty("prop")) 对于检查
我正在为 Android 手机开发一个基于 Java 的回合制 RPG,目前我正在尝试弄清楚如何处理具有超出伤害的额外变量的攻击。例如,当目标具有燃烧效果时,我想让火焰攻击额外造成 10% 的伤害。我
我有一个它正在选择的怪物列表。 def monsters(): whatMonster = random.randint(0, 25) monster = pickMonste
一个多星期以来,我们一直在与 SurfaceViews 相关的一些问题作斗争,但没有找到合适的解决方案。我们阅读了论坛中关于类似问题(甚至 Mixare 源代码)的其他问题,但找不到答案,所以我们希望
我有一个顶部 div,它有 position: fixed。在 div 之后,我有一个菜单 div 也有 position: fixed,它将被定位为与顶部 div 重叠,因此它需要一个正确的 z-i
我正在尝试使用带 SSL 的 curl,但我收到有关证书的永久性错误。我知道 OSX 在 curl 证书方面一团糟,我想我在为开发人员创建自己的自签名证书(本地主机上的 node_ssl_server
I have written this pen 编辑 see this pen of Alexander Omara for a shorter version of my pen 基本上,我们将 b
我是一名优秀的程序员,十分优秀!