|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2012
Сообщений: 297
|
Как можно поставить между двумя точками круг?
Здравствуйте.
Есть две точки. Одна - главный персонаж, корабль. Другая - противник, тоже корабль. Я узнаю расстояние между двумя кораблями, которое потом становится радиусом круга. Этот круг рисуется и добавляется между двумя точками (пока только если противник находится выше или ниже главного персонажа и соответственно ровно). Как можно добавить круг между двумя точками, если корабли находятся не только на разной высоте, но и на разных точках на горизонтальной линии? Пока думаю, что можно реализовать как-то так: Берём расстояние между двумя точками, делим это расстояние на два. Так же получаем угол главного персонажа относительно противника. Потом как-то связываю с точкой отсчёта (главным персонажем) полученное расстояние и угол. |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Всё намного проще. Достаточно интерполировать точки.
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
И я бы в таком виде не оставил, тем более для игры. Методы Point они хорошие, но вот если бы они ещё были inline,
то было бы вообще здорово, так как в играх же, каждый кадр пересчитываются координаты и методы поинта медленней чем рукотворная математика. package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; public class CirclePoint extends Sprite { public function CirclePoint() { stage.addEventListener(MouseEvent.MOUSE_DOWN, stage_mouseDownHandler); } private function stage_mouseDownHandler(event:MouseEvent):void { if (this.numChildren) this.removeChildren(); var A:Point = this.drawPoint(this.coords()); var B:Point = this.drawPoint(this.coords()); var radius:Number = Math.sqrt(Math.pow((B.x - A.x), 2) + Math.pow((B.y - A.y), 2)) / 2; var center:Point = new Point((A.x + B.x) / 2, (A.y + B.y) / 2); this.drawPoint(center); this.drawCircle(center, radius); } private function drawCircle(center:Point, radius:Number):void { var circle:Sprite = new Sprite(); circle.graphics.lineStyle(1, 0xffffff); circle.graphics.drawCircle(center.x, center.y, radius); circle.graphics.endFill(); this.addChild(circle); } private function coords():Point { var pX:int = Math.round(Math.random() * stage.stageWidth); var pY:int = Math.round(Math.random() * stage.stageHeight); return new Point(pX, pY); } private function drawPoint(p:Point):Point { var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xffffff); circle.graphics.drawCircle(0, 0, 5); circle.graphics.endFill(); circle.x = p.x; circle.y = p.y; this.addChild(circle); return p; } } } Последний раз редактировалось Akopalipsis; 20.12.2013 в 22:19. |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Тот же Math.pow можно не использовать, а вообще - оптимизировать нужно само приложение, а не какие-то специфические функции. Это стоит делать в конце и в крайнем случае.
|
|
|||||
Регистрация: Aug 2012
Сообщений: 297
|
Спасибо всем.
|
|
|||||
Регистрация: Aug 2012
Сообщений: 297
|
Извините за оффтоп:
Можно ли как-нибудь добавить третью точку 3, которая будет находится относительно центра двух точек (1,2) с таким же расстоянием, как от точки 1 до центра, но только по вертикали (или: с углом 360 градусов, если точка регистрации имеет те же координаты, что и центральная точка)? |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Естественно не какого Math.pow, но вот в остальном не соглашусь. Как мне кажется, самое главное в as3 это - координаты и работа с ними. Мне сложно представить игру, которая использует нативные инструменты.
Не кто не может облегчить работу с математикой, так как - inline, который я так и не смог настроить Добавлено через 3 минуты Dip52 вообще не понятно.. |
Часовой пояс GMT +4, время: 03:27. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|