Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проверка на принадлежность курсора окружности (http://www.flasher.ru/forum/showthread.php?t=146910)

herotic 21.11.2010 20:53

Проверка на принадлежность курсора окружности
 
Приветствую. Скажите, пожалуйста, как можно проверить или курсор принадлежит окружности? К примеру есть точки на площади и есть условие, если курсор нажимает в эту точку идет проверка, если курсор попал вокруг точки на 10 пикселей то ничего не происходит, а если не попал, то ставится новая точка.

Саму проверку я делаю так: Проверяю или человек уже ставил точку, если не ставил смотрю в массиве или координаты курсора меньше или равны координатам точки + 10 пикселей. Вот с вторым условием у меня почему-то проблемы.

Код AS3:

 
if (postavil != 1){
                                for(i = 0; i < my_point.length(); i++)
                                {
                                        if ((cursor_mc.x <= my_point[i].@KOORDX - radius) || (cursor_mc.y <= my_point[i].@KOORDY - radius))
                                                {
                                                        postavil = 1;
                                                }
                                                else
                                                {
                                                        postavil = 0;
                                                }
                                }}

Помогите, пожалуйста, составить правильное условие проверки принадлежности.

goodguy 21.11.2010 21:19

Можно сделать так,

Высчитать расстояние от курсора до точки по теореме пифагора:
Код AS3:

var distanceToPointer:Number = Point.distance(new Point(stage.mouseX, stage.mouseY), vashaTochka);
 
if (distanceToPointer < nushnoyeRasstoyaniye) {
    postavil = 1;
} else {
    postavil = 0;
}

т.е. в данном случае измерятся радиус окружности, центром которой является ваша точка, и если курсор находится от нее на расстоянии меньше радиуса, то естественно он попадает в окружность

Для множества точек, думаю тоже не составит особого труда придумать механизм

herotic 21.11.2010 21:52

Как я понимаю, что переменная vashaTochka это либо место точки по X или по Y на площади? Или как?

goodguy 21.11.2010 22:49

Это положение точки и по Х и по У одновременно. По-моему другого и быть не может

Код AS3:

var vashaTochka:Point = new Point(my_point[i].@KOORDX, my_point[i].@KOORDY);


herotic 21.11.2010 23:01

Никогда просто с Point не работал, поэтому и спрашиваю :) Спасибо, сейчас попробую :)

Добавлено через 53 минуты
Что-то не работает.

Может проблема в том, что у меня как-то не так все организованно в программе? В плане вытаскивания инфы из массива? Может быть такое?

goodguy 22.11.2010 09:05

Вполне. Так как я этот код использовал неоднократно. Всегда все работало без каких-либо пролем

herotic 23.11.2010 15:52

Сегодня попробовал сделать как Вы сказали, но ничего не получилось, даже не знаю почему. Вы не могли бы выложить рабочий исходник?

passertm 23.11.2010 16:12

а что значит не работает? как он себя ведет. поставьте трейсы. выведите значения переменных. это слишком просто код чтобы взять так в наглую и не работать.
попробуйте сделать вот это и написать какой текст выводится когда программа работает не правильно
Код AS3:

trace("stage.mouseX="+stage.mouseX);
trace("stage.mouseY="+stage.mouseY);
trace("vashaTochka.x="+vashaTochka.x);
trace("vashaTochka.y="+vashaTochka.y);
 
var distanceToPointer:Number = Point.distance(new Point(stage.mouseX, stage.mouseY), vashaTochka);
 
trace("distanceToPointer="+distanceToPointer);
 
 
if (distanceToPointer < nushnoyeRasstoyaniye) {
    postavil = 1;
} else {
    postavil = 0;
}


herotic 23.11.2010 19:18

Полностью рабочий код :) Может кому-нибудь пригодиться :) Спасибо, все классно работает :)

Код AS3:

import flash.display.Sprite;
import flash.events.MouseEvent;
 
          var mc_tochka:MovieClip=new MyPoint();
 
      function Main():void {
        addChild(mc_tochka);
                mc_tochka.x = 25;
                mc_tochka.y = 35;
        stage.addEventListener(MouseEvent.CLICK,ClickOnStage);                       
      }
 
          function ClickOnStage(event:MouseEvent):void
          {
                                  var vashaTochka:Point = new Point(mc_tochka.x, mc_tochka.y);
                var distanceToPointer:Number = Point.distance(new Point(stage.mouseX, stage.mouseY), vashaTochka);
                  trace("distanceToPointer="+distanceToPointer);
          }
 
Main()


goodguy 23.11.2010 20:16

А это зачем?
Код AS3:

Main()

В смысле зачем вызывать document class дополнительно Oo


Часовой пояс GMT +4, время: 20:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.