private function update(event:Event) { for (i in limbs) { var dx = 0; var dy = 0; for (j in limbs) { if (i == j) continue; var vx = limbs[i].x - limbs[j].x; var vy = limbs[i].y - limbs[j].y; var len = vx * vx + vy * vy; try { if (links[i][j] > 0) { var nlen:Number = Math.sqrt(len); nlen = (nlen == 0) ? .0001 : nlen; var f = (connectors[(links[i][j] - 1)].len - nlen) / (nlen * 3); var ndx = f * vx; var ndy = f * vy; limbs[i].dx += ndx; limbs[i].dy += ndy; limbs[j].dx -= ndx; limbs[j].dy -= ndy; connectors[(links[i][j] - 1)].graphics.clear(); connectors[(links[i][j] - 1)].graphics.lineStyle(1, 0xFFFFFF, 100); connectors[(links[i][j] - 1)].graphics.moveTo(limbs[j].x, limbs[j].y); connectors[(links[i][j] - 1)].graphics.lineTo(limbs[i].x, limbs[i].y); } } catch(e:*) {} if (len == 0) { dx += Math.random(); dy += Math.random(); } else if (len < 10000) { dx += vx / len; dy += vy / len; } } var dlen = dx * dx + dy * dy; if (dlen > 0) { dlen = Math.sqrt(dlen) / 2; limbs[i].dx += dx / dlen; limbs[i].dy += dy / dlen; } var movx = Math.max(-5, Math.min(5, limbs[i].dx)); var movy = Math.max(-5, Math.min(5, limbs[i].dy)); if(Math.abs(movx) > 1) limbs[i].x += movx; if(Math.abs(movy) > 1) limbs[i].y += movy; if (limbs[i].x < 0) { limbs[i].x = 0; } else if (limbs[i].x > stage.stageWidth) { limbs[i].x = stage.stageWidth; } if (limbs[i].y < 0) { limbs[i].y = 0; } else if (limbs[i].y > stage.stageHeight) { limbs[i].y = stage.stageHeight; } limbs[i].dx /= 2; limbs[i].dy /= 2; } }