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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.09.2013, 16:09
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 1  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
По умолчанию Есть ли методы, аналогичные HitTestObject?

Есть ли методы, аналогичные HitTestObject?

Старый 21.09.2013, 16:25
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Есть ещё hitTestPoint http://help.adobe.com/ru_RU/FlashPla...#hitTestPoint()
А так, лучше самому, что то придумать.. Пересечение отрезков, лучей, различных фигур..

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Еще DisplayObjectContainer#getObjectsUnderPoint()
__________________
Reality.getBounds(this);

Старый 21.09.2013, 20:41
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 4  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
Есть ли методы, аналогичные HitTestObject?
Смотря что тебе нужно.

Вот, например, проверка пересечения двух Rectangle:
Код AS3:
public function intersects(rect1:Rectangle, rect2:Rectangle):Boolean
{
	return (!((rect1.right<rect2.left)||(rect1.left>rect2.right))) && (!((rect1.bottom<rect2.top)||(rect1.top>rect2.bottom)));
}
Для скорости, можно сделать эту функцию inline (только, если компилятор ASC2).

UPD:
Как подсказали ниже, Rectangle#intersects() все таки быстрее работает.


Последний раз редактировалось MikroAcse; 21.09.2013 в 21:38.
Старый 21.09.2013, 20:53
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 5  
Ответить с цитированием
Akopalipsis
Banned

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Для скорости, можно сделать эту функцию inline (только, если компилятор ASC2).
Расскажите пожалуйста, что это такое?

Старый 21.09.2013, 21:02
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Всегда думал, что пересечение ректанглов определяется методом Rectangle#intersects().
Или он медленней?

UPD: Проверил, intersects() быстрее в полтора раза.
__________________
Reality.getBounds(this);

Старый 21.09.2013, 21:29
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 7  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
UPD: Проверил, intersects() быстрее в полтора раза.
Какой именно? Мой вариант или Rectangle#intersects?

Добавлено через 2 минуты
Цитата:
Расскажите пожалуйста, что это такое?
Inline вставляет содержимое функции в то место, где она вызывается, например:
Код AS3:
inline function hello(arg1:int):String {
    var result:String = "hello: " + arg1;
    return "world, " + result;
}
var helloStr:String = hello();
//превращается в:
var local0:String = "hello: " + 5;
var helloStr:String = "world, " + local0;

Старый 21.09.2013, 21:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Какой именно?
Rectangle#intersects()
__________________
Reality.getBounds(this);

Старый 21.09.2013, 21:37
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 9  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
Rectangle#intersects()
Спасибо, Wolsh.
В интернете было написано, что мой вариант (писал не я) быстрее этого самого Rectangle#intersects;
Видимо, врут. Учту в следующий раз.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
 
	/**
	 * ...
	 * @author wolsh
	 */
	public class TimeTest extends Sprite 
	{
		private var _counts:uint = 5000000;
 
		public function TimeTest():void 
		{
			stage.addEventListener(MouseEvent.CLICK, test);
		}
 
		private function test(event:MouseEvent):void
		{
			var r1:Rectangle = new Rectangle(100, 220, 500, 310);
			var r2:Rectangle = new Rectangle(100, 310, 220, 500);
			var d0:Date = new Date();
			for (var i:uint = 0; i < _counts; i++)
			{
				/* FIRST FIGURANT CODE                     */
				var r:Boolean = r1.intersects(r2);
				/*                                         */
			}
			var d1:Date = new Date();
			for (var j:uint = 0; j < _counts; j++)
			{
				/* SECOND FIGURANT CODE                    */
				var n:Boolean = (!((r1.right<r2.left)||(r1.left>r2.right))) && (!((r1.bottom<r2.top)||(r1.top>r2.bottom)));
				/*                                         */
			}
			var d2:Date = new Date();
			trace("FIRST  : " + (d1.time - d0.time).toString());   // FIRST  : 5193
			trace("SECOND : " + (d2.time - d1.time).toString()); // SECOND : 6859
		}
	}
}
__________________
Reality.getBounds(this);

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

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

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


 


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


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