是否可以定义我自己的Switch语句类型?

时间:2014-01-28 20:20:56

标签: javascript raphael

在创建逻辑以保持移动方块在平方螺旋的范围内时,我最终得到了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);
}

如果有人能想到更好的头衔;请继续改变它。

0 个答案:

没有答案