I have been working through an example of a basic AI script from Jobe Makar's excellent book
“Flash MX games design demystified” there is one section that has really got me stumped.
Basically there are baddies that chase a goodie – code runs to determine where the hero is relative to the bad guys -1 if he is to the left 0 same column 1 to the right + similar sort of thing for “up” & “down” The result is alocated to the variables xsign & ysign now the part I'm having problems with is this section
this is supposed to tell us if the baddie is in the same row or column – but i can't see how.Code:if (xsign == ysign || xsign == -ysign) { var ran = random(2); if (ran == 0) { var xsign = 0; } else { var ysign = 0; } }
I have set out the whole function (part of a larger script) below so you can see it in context, but if anyone can explain how the above achieves what it is supposed to i would be grateful.
Code:function baddyAI() { for (var i = 0; i<game.baddies.length; ++i) { var ob = game.baddies[i]; ++ob.time; var cell_x = Math.ceil(ob.x/game.cellWidth); var cell_y = Math.ceil(ob.x/game.cellWidth); var cell_over = game.tiles[cell_x][cell_y]; var cell_x_temp = Math.ceil(ob.tempx/game.cellWidth); var cell_y_temp = Math.ceil(ob.tempy/game.cellWidth); var cell_over_temp = game.tiles[cell_x_temp][cell_y_temp]; if (!cell_over_temp.empty || ob.time == ob.maxtime) { ob.time = 0; ob.maxtime = 30+random(30); ob.tempx = ob.x; ob.tempy = ob.y; var tempDir = ob.dir; var xmov = 0; var ymov = 0; var speed = Math.abs(ob.speed); var xsign = (game.char.x-ob.x)/Math.abs((game.char.x-ob.x)); var ysign = (game.char.y-ob.y)/Math.abs((game.char.y-ob.y)); if (random(10) == 0) { var xsign = -1*xsign; var ysign = -1*ysign; } if (xsign == ysign || xsign == -ysign) { var ran = random(2); if (ran == 0) { var xsign = 0; } else { var ysign = 0; } } if (xsign != 0) { var ymov = 0; var xmov = xsign*speed; if (xmov>0) { var dir = "right"; } else { var dir = "left"; } } else if (ysign != 0) { var xmov = 0; var ymov = ysign*speed; if (ymov>0) { var dir = "down"; } else { var dir = "up"; } } ob.dir = dir; ob.clip.gotoAndStop(dir); ob.xmov = xmov; ob.ymov = ymov; } } }




Reply With Quote