Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.04.2011, 15:29
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 1  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
По умолчанию Вопрос по hitTestObject( )

вопрос :

У нас есть Фигура нарисованна на экране (круг) и есть прямая тоже нарисованная на экране. почему среда считает что круг касается прямой когда на самом деле нифига не касается ?
вот работающий код для наглядности


Код AS3:
package 
{ 
 
 import flash.events.* ; 
 import flash.display.* ; 
 
 public class example extends Sprite 
 {
 public var circle : Sprite = new Sprite ( ) ; 
 public var line : Shape = new Shape ( ) ; 
  public function example ( ) 
 
 {  
   circle.graphics.lineStyle(1,0xff0000) ;
   circle.graphics.beginFill(0xff0000);  
   circle.graphics.drawCircle(500,250,20) ; 
   addChild(circle) ; 
 
   circle.addEventListener(MouseEvent.MOUSE_DOWN,drag) ;
   circle.addEventListener(MouseEvent.MOUSE_UP ,stopdrag) ; 
 
   line.graphics.lineStyle(1,0x0000ff) ; 
   line.graphics.moveTo(100,100) ; 
   line.graphics.lineTo(300,300) ;
 
   addChild(line) ;
  trace ("перетащи красный круг на линию пожалуйста" ) ; 
 } 
 public function drag (e: MouseEvent) 
 { 
 circle.startDrag( ) ; 
 }  
   public function stopdrag (e:MouseEvent) 
  { 
      circle.stopDrag( ) ; 
 
           if (circle.hitTestObject(line)) 
                 { 
                  trace (" произошло касание" ) ; 
                    } 
             else 
                  { 
                   trace ("касания не произошло" ) ; 
                    }
  }
   }
}
откройте тайну


Последний раз редактировалось dimarik; 14.04.2011 в 17:43.
Старый 14.04.2011, 15:34
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Код нужно обрамлять тегами AS3.

По поводу вопроса, на самом деле hitTestObject() не расчитывает касание видимых частей фигур, он вычисляет пересечение их ограничивающих прямоугольников (bounding box).
Так что прямая может и не касаться круга для человека, но для программы они будут пересекаться.
Самый точный метод для расчета столкновений не прямоуголных, позиционированных вертикально объектов - это SAT (Separating Axis Theorem)

Старый 14.04.2011, 15:35
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Потому что hitTestObject работает не с самой формой объекта, а с прямоугольником, который его окружает (стороны этого прямоугольника всегда параллельны осям координат).
__________________
...вселенская грусть

Старый 14.04.2011, 15:38
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 4  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
понял , спасибо

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

Старый 14.04.2011, 16:42
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 5  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от Bazel Посмотреть сообщение
интерсно почему тогда касание между Кругами нормально регистрируются
Смотря с какой стороны произошло столкновение:


[IMG]http://i.***********/i5/46/71/1377146/bounds.jpg[/IMG]

Старый 14.04.2011, 17:10
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 6  
Ответить с цитированием
Bazel
[+1 26.12.11]
[+1 11.09.11]

Регистрация: Feb 2011
Сообщений: 117
да , точно ..

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
hitTestObject( ) , границ , граница , границы
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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