2013-11-29 6 views
0

Я работаю над редактором для карты, мне нужно сделать редактор карт быстрее, и мне сказали удалить каждый вложенный цикл и сделать их без инструкции for, может ли кто-нибудь привести меня к тому, как я мог бы это сделать?Как сделать forloop без использования для оператора

var tiles = []; 
var draw = 0; 
var w = 0; 
var h = 0; 

$(document).ready(function() { 
    $('#tile-selector img').click(function() { 
     draw = $(this).attr("tile"); 
    }); 
}); 

function run() { 
    w = $("#w").val(); 
    h = $("#h").val(); 

    for (var x = 0; x < h; x++) { 
     tiles[x] = []; 
     for (y = 0; y < w; y++) { 
      tiles[y] = []; 
      $("#box").append("<img src='src/" + draw + ".gif' x='" + x + "' y='" + y + "' height='15' width='15'></img>"); 
      tiles[x][y] = draw; 
     } 
     $("#box").append("<br />"); 
    } 


    $("#box img").click(function() { 
     $(this).attr("src", "src/" + draw + ".gif"); 
     tiles[$(this).attr("x")][$(this).attr("y")] = draw; 
    }); 
} 

function end() { 
    var output = ""; 
    for (var x = 0; x < w; x++) { 
     for (var y = 0; y < h; y++) { 
      if (tiles[x][y] > 0) { 
       output += "tiles[" + x + "+" + y + "*width] =" + tiles[x][y] + ";\r\n"; 
      } 
     } 
    } 
    $("#output").val(output); 
} 

Удалена первая петля и ставится плитка [y] = []; в вложенном цикле

+0

пут 'плитки [Y] = [];' из первого контура во второй контур перед вложенным циклом;) и удалите первый цикл. – Givi

+0

измените ваши x и y вокруг метода 'run', большинство языков использует строчный основной порядок http://en.wikipedia.org/wiki/Row-major_order – exussum

+0

@ Гиви, поэтому удалил мой первый цикл и положил плитку [ i] = []; до первого вложенного? – Dianamu

ответ

0

Для этого цикла

for(var y = 0; y < h; y++) { 
     for (x = 0; x < w; x++) { 
      $("#box").append("<img src='src/" + draw +".gif' x='"+ x +"' y='"+ y +"' height='15' width='15'></img>");    
      tiles[x][y] = draw; 
     } 
     $("#box").append("<br />"); 
    } 

пару вещей, изменяя порядок цикла может помочь в связи с JavaScript, используя строку большой заказ.

взятие $('#box') снаружи поможет или даже удаляя все это вместе так, например

var box = ""; 
    for(var x = 0; z < w; x++) { 
     for (y = 0; y < h; y++) { 
      box += "<img src='src/" + draw +".gif' x='"+ x +"' y='"+ y +"' height='15' width='15'></img>";    
      tiles[x][y] = draw; 
     } 
     box += "<br />"; 
    } 
    $('#box').append(box); 
    box = null; 

должно ускорить его

+0

Thats просто остановил его от запуска – Dianamu

+0

извините синтаксическую ошибку, исправил попытку снова – exussum

+0

Still no. Не работает – Dianamu

Смежные вопросы