他们是如何在游戏中进行实时内容更新的?我们演示
How do they do the live content updating in the famo.us demos?
如果您查看famo上的任何演示。我们的网站,他们都让你输入代码,并在正确的输出实时更新。我找遍了所有地方,但我似乎找不到任何关于这是如何实现的文档。
的例子:http://famo.us/examples/0.2.0/core/context/example
我不知道这是不是那个特定的例子是如何实现的,但我能够很快地把一些东西放在一起,至少希望能给你一些指导。
在下面的例子中,我使用了一个FlexibleLayout来划分页面。然后我添加一个TextareaSurface来创建一个编辑器和一个容器表面来呈现结果。我添加了一个RenderNode以及ContainerSurface,这样我就可以保持相同的容器,并冲洗和重用RenderNode。
现在如何改进…
1)我们的演示让您创建自己的上下文并添加到其中。在我的示例中,'outputNode'是输出显示的出口。同样,在我的情况下,这是为了简单起见,但要实现他们所实现的目标,我将自己解析代码并将主上下文替换为我所知道的我希望呈现的节点。
2)我在自己的代码中使用的名称应该使用某种前缀来使其更加独特。现在,编辑器中代码的名称很容易与我用来编写编辑器的变量名称冲突。
无论如何,这是我所做的,希望它帮助!
var Engine = require("famous/core/Engine");
var Surface = require("famous/core/Surface");
var RenderNode = require("famous/core/RenderNode");
var FlexibleLayout = require("famous/views/FlexibleLayout");
var ContainerSurface = require("famous/surfaces/ContainerSurface");
var TextareaSurface = require("famous/surfaces/TextareaSurface");
var context = Engine.createContext();
var layout = new FlexibleLayout({ratios:[0.5,0.5]});
var layoutCells = [];
layout.sequenceFrom(layoutCells);
var editor = new TextareaSurface({
size:[undefined,undefined],
properties:{
fontSize:'18px',
fontFamily:'courier',
padding:'10px'
}
});
var code = ""
code += "var surface = new Surface({ " + "'n";
code += " size:[200,200], " + "'n";
code += " content:'Hello', " + "'n";
code += " properties:{ " + "'n";
code += " backgroundColor:'green', " + "'n";
code += " lineHeight:'200px', " + "'n";
code += " textAlign:'center' " + "'n";
code += " } " + "'n";
code += "}); " + "'n";
code += " " + "'n";
code += "outputNode.add(surface); " + "'n";
editor.setValue(code);
var outputNode;
var evalCode = function(code){
try {
outputNode.render = function(){return null};
makeOutput();
outputContainer.add(outputNode);
eval(code);
}
catch (err) {
console.log("Error: "+err);
}
}
editor.on('keyup',function(){
var code = editor.getValue();
evalCode(code);
})
layoutCells.push(editor);
var makeOutput = function(){
outputNode = new RenderNode({
size:[undefined,undefined],
backgroundColor:'white'
})
}
outputContainer = new ContainerSurface({
size:[undefined,undefined],
backgroundColor:'white'
})
outputContainer.add(outputNode);
makeOutput();
evalCode(code);
layoutCells.push(outputContainer);
context.add(layout);
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- 如果在线检查期间发生电源故障,我们如何更新用户再次登录门户时的剩余时间
- 在OpenCart中,我们如何实时更新数据
- 为什么我们将“(keyup)”分配给模板局部变量的随机值以在 Angular2 中更新
- 我们的文件不会在交叉骑士调试模式下更新
- 我们可以更新一个javascript数组变量,而不使用ajax重新加载页面吗?
- 当我们在应用程序中向后移动时,有没有办法更新登录状态
- 我们是否必须创建新的弹出每次都有更新的谷歌浏览器
- 我们更新v-for属性
- 他们是如何在游戏中进行实时内容更新的?我们演示
- idangero.我们的滑动器更新标签滑动
- 如何让grunt用户更新JS来引用我们的图像
- 当我们设置更新的对象时,如何在主干模型上触发更改事件