![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Здравствуйте.
Цель: Определить какие противники находятся в области прицела. + Поместить этих противников в специальный массив. + Определить какой противник в специальном массиве самый слабый. + Присвоить координаты самого слабого противника мушке. ? Положение: Прицел A. Мушка B. Противник C. Мушка находится в том же контейнере, что и прицел. Противник снаружи. Перед проверкой "какие противники находятся в области прицела" я перевожу координаты прицела с локальных в глобальные. Чтобы убедиться в том, что проверка действительно работает я присваивал определённую прозрачность тем противникам, которые находятся в области прицела. Когда я определил самого слабого противника я перевёл его глобальные координаты в локальные и присвоил их мушке. Я получил в итоге: то движение мушки вокруг прицела, то противник стоит в одном месте, а мушка совсем в другом. package madness.operation { import flash.events.Event; import flash.display.MovieClip; import flash.geom.Point; import flash.display.Sprite; import madness.*; import flash.display.Shape; import madness.background.Fields; public class Aiming { private var enemies:Array = []; private var range:Number = 40; private var limit:Number = 20; public function Aiming() { //Создаю прицел: var wings:MovieClip = new Wings(); wings.name = 'sight'; wings.y = -200; Settings.wings.addChild(wings); Fields.FIELDFORWINGS.addChild(Settings.wings); //Создаю прицел: //Создаю мушку: var foresight:MovieClip = new Foresight(); foresight.name = 'foresight'; wings.addChild(foresight); //Создаю мушку: Settings.stage.addEventListener(Event.ENTER_FRAME,work); } public function work(event:Event):void { wingsMove(); drawLimitAiming(); const LENGTHENEMIES:int = Settings.rangers.length; const WINGS:MovieClip = MovieClip(Settings.wings.getChildByName('sight')); var clickPoint:Point=new Point(0, 0); var wingsPoint:Point = WINGS.localToGlobal(clickPoint); const FORESIGHT:MovieClip = MovieClip(WINGS.getChildByName('foresight')); for(var e:int = 0; e < LENGTHENEMIES; e++) { const ENEMY:MovieClip = Settings.rangers[e]; var onePoint:Point = new Point(); var twoPoint:Point = new Point(); var r:Number = Settings.wings.rotation*Math.PI/180; onePoint.x = ENEMY.x - wingsPoint.x; onePoint.y = ENEMY.y - wingsPoint.y; twoPoint.x = onePoint.x*Math.cos(r) - onePoint.y*Math.sin(r); twoPoint.y = onePoint.y*Math.sin(r) + onePoint.y*Math.cos(r); if(range >= getDistanceForesightAndTarget(twoPoint,new Point()) && limit > Math.abs(twoPoint.y)) { enemies.push(ENEMY); ENEMY.alpha = .5; } else { ENEMY.alpha = 1; } } const L:int = enemies.length; if(L == 0) { FORESIGHT.x = 0; FORESIGHT.y = 0; return; } var id:int = int.MAX_VALUE; var l:int = int.MAX_VALUE; for(var feeble:int = 0; feeble < enemies.length; feeble++) { const life:int = enemies[feeble].life; if(l > life) { l = life; id = feeble; } } if(id != int.MAX_VALUE) { var enemy:MovieClip = enemies[id]; enemies.splice(0,enemies.length); var cp:Point = new Point(0,0); var fPoint:Point = enemy.globalToLocal(cp); FORESIGHT.x = fPoint.x; FORESIGHT.y = fPoint.y; } } //Метод рисования границ прицеливания: private function drawLimitAiming():void { var sight:MovieClip = MovieClip(Settings.wings.getChildByName('sight')); sight.graphics.clear(); sight.graphics.lineStyle(1,0x00FFFF); //Верхняя линия: sight.graphics.moveTo(-range, -limit); sight.graphics.lineTo(range, -limit); //Нижняя линия: sight.graphics.moveTo(-range, limit); sight.graphics.lineTo(range, limit); } //Метод определения дистанции между мишенью и мушкой: private function getDistanceForesightAndTarget(foresight:Point,target:Point):Number { return Math.sqrt(Math.pow(foresight.x-target.x,2)+Math.pow(foresight.y-target.y,2)); } //Движение крыльев: private function wingsMove():void { var wings:MovieClip = Settings.wings; var mainPersona:MovieClip = Settings.mainPersona; wings.x = mainPersona.x; wings.y = mainPersona.y; wings.rotation = mainPersona.rotation; } } } |
![]() |
Часовой пояс GMT +4, время: 10:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|