Javascript 一连串的移动精灵跟随玩家,最有效的方法是什么?

Javascript 一连串的移动精灵跟随玩家,最有效的方法是什么?,javascript,optimization,phaser-framework,Javascript,Optimization,Phaser Framework,我正在使用Phaser开发一个JavaScript游戏,玩家拾取水滴,然后跟随玩家。所以会有一连串的精灵跟随玩家的动作,有点像球或球线 我的问题是,获得这种效果的最佳方式是什么? 目前我的方法是这样的: 保持x/y位置的大数组 对于每个帧更新,转到下一个数组索引 将玩家的x/y位置放在当前索引的数组中 对于每个blob,保留一个单独的数组索引,并从该索引复制x/y位置 这是可行的,但我怀疑移动设备的性能会有问题,因为即使在笔记本电脑上,它有时也会落后。此外,当BLOB行变长时,需要调整数组的大

我正在使用Phaser开发一个JavaScript游戏,玩家拾取水滴,然后跟随玩家。所以会有一连串的精灵跟随玩家的动作,有点像球或球线

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

  • 保持x/y位置的大数组
  • 对于每个帧更新,转到下一个数组索引
  • 将玩家的x/y位置放在当前索引的数组中
  • 对于每个blob,保留一个单独的数组索引,并从该索引复制x/y位置
  • 这是可行的,但我怀疑移动设备的性能会有问题,因为即使在笔记本电脑上,它有时也会落后。此外,当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];
        }
    }
    
    函数创建(){
    //创造这个家伙
    _grpblobs=game.add.group();
    _thedude=game.add.sprite(0,0,'phaserdude');
    _idxoff=0;
    //添加斑点
    对于(var i=0;i