移动精灵跟随玩家的字符串,最有效的方法吗?

时间:2017-05-26 08:21:05

标签: javascript optimization phaser-framework

我正在使用Phaser开发一款JavaScript游戏,其中玩家获取blob,然后blob跟随玩家。所以在玩家的移动之后会有一串精灵,有点像"options" in Gradiusthe game Zuma中的球线。

from my phaser test program, a moving string of blobs

我的问题是,获得这种效果的最佳方法是什么? 目前我的方法是这样的:

  1. 保留大量x / y位置
  2. 对于每次帧更新,请转到下一个数组索引
  3. 将播放器的x / y位置放在当前索引
  4. 的数组中
  5. 对于每个blob,保留一个单独的数组索引并从该索引复制x / y位置。
  6. 它有效,但我怀疑手机上的性能会有问题,因为即使在笔记本电脑上它也有时会滞后。此外,当blob行变长时,需要调整数组的大小。虽然这可以通过使阵列最大化来解决。

    最有效和最快想法的想法,使用哪种数据类型,最佳做法等?最快的表现是最重要的。

    到目前为止,这是我的代码:

    function create() {
        // create the guy
        _grpblobs = game.add.group();
        _thedude = game.add.sprite(0, 0, 'phaserdude');
        _idxoff = 0;
    
        // add blobs
        for (var i=0; i<40; i++) {
            var blob = game.add.sprite(0, 0, 'orbs', (i%6));
            _grpblobs.add(blob);
        };
    
        // array to keep track of positions
        for (var i=0; i<1000; i++) {
            _blobpos[i] = 0;
        };
    
        // mouse input for testing
        window.addEventListener("mousemove", onGameMouseMove);
    }
    
    function onGameMouseMove(evt) {
        _thedude.x = evt.x;
        _thedude.y = evt.y;
    }
    
    function update() {
        // the main guy current position
        _blobpos[_idxoff]   = _thedude.x;
        _blobpos[_idxoff+1] = _thedude.y;
    
        // -2 because it's 2 values; x value and y value
        _idxoff = _idxoff - 2;
        if (_idxoff < 0) _idxoff = _idxoff + 1000;
    
        // update blob positions
        for (var i=0; i < _grpblobs.length; i++) {
            var idx = _idxoff + ( (i+1) * 20);
            idx = idx % 1000;
    
            _grpblobs.children[i].x = _blobpos[idx];
            _grpblobs.children[i].y = _blobpos[idx+1];
        }
    }
    

0 个答案:

没有答案