Ниже приводится несколько методов, которыми вы можете улучшить его:
Программа коррекции перемещает персонажа по направлению к центру плитки для продолжения движения, вместо прижимания к стенам. Это внешне выглядит лучше, но также и добавляет больше интеллекта.
Когда персонаж сталкивается со стеной, дайте более высокий приоритет для поворота в другом направлении, против нового движения в стену. С имеющимся AI вы можете уткнуться в стену несколько раз, прежде чем двинетесь прочь. Это не все, что имеет значение, потому что столкновения происходят быстро, но такая ситуация возникает.
Добавьте диагональное движение.
Код ActionScript противника
Хорошо, сейчас, наконец, наступил момент взглянуть на код ActionScript, примененный в этом AI. Эта функция, baddyAI(), вызывается в каждом кадре. Она проходит в цикле по массиву противников и определяет, настал ли момент для коррекции. Если да, то она выполняет коррекцию.
1 function baddyAI(){
2 for (var i =0;i<game.baddies.length;++i){
3 var ob =game.baddies [i ];
4 ++ob.time;
5 var cell_x =Math.ceil(ob.x/game.cellWidth);
6 var cell_y =Math.ceil(ob.x/game.cellWidth);
7 var cell_over =game.tiles [cell_x ][cell_y ];
8 var cell_x_temp =
.Math.ceil(ob.tempx/game.cellWidth);
9 var cell_y_temp =
.Math.ceil(ob.tempy/game.cellWidth);
10 var cell_over_temp =
.game.tiles [cell_x_temp ][cell_y_temp ];
11 if (!cell_over_temp.empty
.||ob.time ==ob.maxtime){
12 ob.time =0;
13 ob.maxtime =30+random(30);
14 ob.tempx =ob.x;
15 ob.tempy =ob.y;
16 var tempDir =ob.dir;
17 var xmov =0;
18 var ymov =0;
19 var speed =Math.abs(ob.speed);
20 var xsign =(game.char.x-ob.x)/
.Math.abs((game.char.x-ob.x));
21 var ysign =(game.char.y-ob.y)/
.Math.abs((game.char.y-ob.y));
22 if (random(10)==0){
23 var xsign =-1*xsign;
24 var ysign =-1*ysign;
25 }
26 if (xsign ==ysign ||xsign ==-ysign){
27 var ran =random(2);
28 if (ran ==0){
29 var xsign =0;
30 }else {
31 var ysign =0;
32 }
33 }
34 if (xsign !=0){
35 var ymov =0;
36 var xmov =xsign*speed;
37 if (xmov>0){
38 var dir ="right";
39 }else {
40 var dir ="left";
41 }
42 }else if (ysign !=0){
43 var xmov =0;
44 var ymov =ysign*speed;
45 if (ymov>0){
46 var dir ="down";
47 }else {
48 var dir ="up";
49 }
50 }
51 ob