小编man*_*sim的帖子

玩40,000单位军队进行比赛

解决了!!(看看我上次编辑)

我想在画布上进行20.000对20.000单位的军队战斗.因此,对于每个单位数据是:

{ 
'id' => 17854,
'x' => 1488, 
'y' => 1269, 
'team' => 'red', 
'health' => 10,
'target' => [1486, 1271]
}
Run Code Online (Sandbox Code Playgroud)

我会实时看到这场战斗(每秒25帧).如果我使用Json生成1帧并保存在文件中,则它是2.5mb大小(具有此数据的40k这样的单位).

1秒(25帧)= 62.5 mb文件大小.战斗可能持续约30分钟,所以它应该使用112gb.这是不好的.如果我将文件作为二进制数据,它应该减少27倍的位置,或4克,30分钟.那仍然很糟糕.2小时电影需要700mb.

我需要在服务器上保存许多战斗.真正的球员应该组建他们的军队并相互战斗,所以我需要战斗才能得救.每次战斗都是独一无二的,因为每个单位的每次伤害都是随机的0~10,并且在单位杀死一个敌人后,它会再生1个生命值.我正在用PHP进行计算并在服务器上保存文件.所有40.000个单位都在一个屏幕上,所有都可以一次看到,我想要那样.目前,单位是单个2x2像素立方体,红色和蓝色团队,它易于加载javascript.

但是,要用PHP生成文件我需要大约1小时.那是另一个问题.因为对于每一帧,我需要迭代这些40.000个单位(用于更新x/y,搜索附近的敌人或朋友,然后进行伤害并返回目标或杀死敌人坐标),然后再次迭代以取消设置被杀死的单位,然后放入所有这些都进入文件,我需要迭代所有内容并删除用于计算的未使用的数据.要完成这30分钟的战斗,我需要重复45000次.此外,每分钟都有越来越少的单位.但我的观点是以某种方式使所有文件在不到一分钟的时间内生成,只需要一个逻辑方式,如果存在的话.

问题:
1)在文件服务器上保存文件并使文件大小更小的最佳方法是什么?(到目前为止是使用二进制数据并压缩到zip)
2)计算我的战斗的最快方法是什么?(到目前为止是用C++编译)

//编辑 这是我的整个游戏代码,就像那样:)

这是主要行动:

class Simulator
{
    private $units;
    private $places = [];
    private $oldPlaces = [];

    public function initiateGame() {
        $this->createUnits();
        $this->startMoving();
    }

    private function createUnits() {
        foreach(range(0, 150) as $column) { // i like exact army formation to look nice, so its 150x140=21000 units
            foreach (range(0, 140) …
Run Code Online (Sandbox Code Playgroud)

javascript php canvas

7
推荐指数
1
解决办法
250
查看次数

实时触发Rails的骨干事件

我正在使用RoR,Backbone,并且我使用sidekiq有一个服务器端功能,所以我的Redis数据库实时更新.当sidekiq更改数据库属性时,我需要触发我的主干事件.Sidekiq函数位于app/assets/workers目录中.基本上我需要来自Rails /app/assets/workers/worker.rb我可以在app/assets/javascripts/backbone/models/monster.js.coffee实时触发我的Backbone集合.当sidekiq实时更新数据库中的属性时,对于Backbone,一切都是静默的,我的集合不会实时更改.如果我刷新页面,它会更新.如何实时触发Rails应用程序的Backbone事件?我是否需要使用另一个框架或者仅仅在rails中使用它?

javascript ruby-on-rails backbone.js

2
推荐指数
1
解决办法
99
查看次数

Sails不会在不进行硬刷新的情况下清除缓存

我的Sails应用程序不更新生产中的javascript文件。我开始生产帆:

NODE_ENV =生产永远启动app.js

但是当我打开网站时,我看不到任何变化。即使我重新启动网站。更改仅在使用ctrl + F5硬刷新或手动清除缓存后才适用。

但是它在本地有效。

这可能与缓存有关,不会强制浏览器更新/清除缓存。怎么解决呢?

我的task / config / sails-linker.js:

  grunt.config.set('sails-linker', {
    devJs: {
      options: {
        startTag: '<!--SCRIPTS-->',
        endTag: '<!--SCRIPTS END-->',
        fileTmpl: '<script src="%s?v='+ new Date().getTime() +'"></script>',
        appRoot: '.tmp/public'
      },
      files: {
        '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject,
        'views/**/*.html': require('../pipeline').jsFilesToInject,
        'views/**/*.ejs': require('../pipeline').jsFilesToInject
      }
    },
Run Code Online (Sandbox Code Playgroud)

因为我没有sails lift在生产中使用,所以将grunt的默认值更改为:

/tasks/register/default.js

module.exports = function (grunt) {


grunt.registerTask('default', [
    'compileAssets',
    'linkAssetsBuildProd',
    'watch',
    'concat',
    'uglify',
    'cssmin',
    'sails-linker:prodJs',
    'sails-linker:prodJsJade',
  ]);
};
Run Code Online (Sandbox Code Playgroud)

我不知道下一步去哪里。

node.js sails.js

2
推荐指数
1
解决办法
1086
查看次数