在创建逻辑以保持移动方块在平方螺旋的范围内时,我最终得到了4块基本相同的代码,除了一些关键的变量名和操作符指令。
这个想法是让编译器复制并粘贴模板 - 在这种情况下是4次。
然后使用$ cases组中的数据替换模板中的美元符号值:区域 - $ 0,$ 1,$ 2等。
您可以在http://jsbin.com/AJemixiT/13/edit的底部看到展开的四个代码块。
我意识到我想要创建的不是一个函数,而是一个像“If”或“Switch”的行为。甚至可以创建自己的一个吗?
这是宏编程吗?
通过创建脚本语言可以更好地解决这个问题吗?
我在耳朵后面湿了,所以任何开始这方面的帮助都会非常感激。
function switchTemplate(i)
{
cases:{
//An Array to correspond with $values below
(0,x,y,+,>=,+,1),
(1,y,x,+,>=,-,2),
(2,x,y,-,<=,-,3),
(3,y,x,-,<=,+,0)
};
template:
switch (enemy_array[i].data('direction'))
{
case $0:
if ( (enemy_array[i].attr('$1') $3 enemy_speed) $4 gb_$1_pos_corners[enemy_array[i].data('approaching_corner')] )
{
distance_moved = gb_$1_pos_corners[enemy_array[i].data('approaching_corner')] - enemy_array[i].attr('$1');
enemy_array[i].attr({
$1: gb_$1_pos_corners[enemy_array[i].data('approaching_corner')],
$2: enemy_array[i].attr('$2') $5 (enemy_speed - distance_moved)
});
enemy_array[i].data('direction',$6);
enemy_array[i].data('approaching_corner',enemy_array[i].data('approaching_corner') + 1);
}
else
{
enemy_array[i].attr({ $1: enemy_array[i].attr('$1') + enemy_speed });
}
break;
}
}
for (i = 0; i < num_of_enemies_spawned; i++) {
switchTemplate(i);
}
如果有人能想到更好的头衔;请继续改变它。