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

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

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

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
По умолчанию реакция на столкновение

Здравствуйте, Народ скажите как при столкновении (обнаружении) с объектом например с блоком в игре реализовать не прохождение через него то есть герой не должен проходит через блок , я пытался проделать это разными способами но получались ужасные баги , например персонаж движется в четырех разных направлениях и разумеется завел переменную speed равная 4 , при контакте с блоком speed обнуляю и этот вариант не подходит т. к. герой полностью останавливается, в голову ничего не приходит.
Было бы интересно узнать как Вы это делаете в Своих разработках.
заранее спасибо.

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Метод пересечения проекций.
__________________
Я заклинаю вас действовать иначе.

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

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
Цитата:
Метод пересечения проекций.
это только обнаружение ? я например использую простой HitTest () не важно какой важно реакция на дедект

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
hitTest - Это отстой. Он определяет столкновение по баундинг боксу. Точным такой замер никак нельзя назвать. Смотри в сторону физических движков и почитай про SAT (теорему о разделяющей оси)
__________________
Ко мне можно и нужно обращаться на ты)

Старый 26.02.2016, 21:38
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 5  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
кстати,SAT в качестве бонуса еще дает вектор наикротчайшего выхода пересекающихся объектов друг из друга, что будет большим плюсом для ТС.
Вот давным давно делал свой платформер на SAT, но, как водится, забросил Управление стрелками.
sat.swf   (5.7 Кб)
Вложения
Тип файла: swf sat.swf (5.7 Кб, 96 просмотров)


Последний раз редактировалось undefined; 26.02.2016 в 21:54.
Старый 26.02.2016, 21:43
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
но, как водится, забросил
Зря забросил) Уже вижу неплохую мобильную игру на таком двигле) аля Rayman
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Oct 2006
Сообщений: 2,281
да, показал эту демку тогдашнему начальству- сказали круто,как-нибудь воспользуемся.А потом меня уволили

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Цитата:
Сообщение от zackscript Посмотреть сообщение
Здравствуйте, Народ скажите как при столкновении (обнаружении) с объектом например с блоком в игре реализовать не прохождение через него то есть герой не должен проходит через блок...
Потому что коллизия неверно рассчитывается
__________________
Я заклинаю вас действовать иначе.

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

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
Цитата:
hitTest - Это отстой
знаю , но я использую его для прямоугольных объектов
Цитата:
почитай про SAT (теорему о разделяющей оси)
я читал про эту теорему там описываются только как ОБНАРУЖИТЬ сложные тела, но меня интересует другое как Вы уже знаете, например у меня в сценарии возникает одна проблема: когда герой ударяется о блок то он прекрасно прекращает своё движение но если еще раз щелкнуть по кнопке "того же направления "(использую кнопки зарегистрированные тач события ) то он проникает в этот блок и с каждым щелчком он движется на 4 пикселя в сторону .
p.s. поменял с TouchEvent на MouseEvent.
Tank.swf   (4.6 Кб)
Вложения
Тип файла: swf Tank.swf (4.6 Кб, 90 просмотров)

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

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
Вот код
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.TouchEvent;
	import flash.events.Event;
	import flash.ui.Multitouch;
	import flash.ui.MultitouchInputMode;
	import flash.desktop.NativeApplication;
	public class Tank extends MovieClip
	{
		private var Speed:Number = 4;
		private var _left:Boolean = false;
		private var _right:Boolean = false;
		private var _up:Boolean = false;
		private var _down:Boolean = false;
		private var platforms:Array = new Array  ;
		private var platform;
		public function Tank()
		{
			Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
			tank.stop();
			//----------------------------------------------------------------------------------------------//
			left.addEventListener(TouchEvent.TOUCH_BEGIN,leftTrue);
			right.addEventListener(TouchEvent.TOUCH_BEGIN,rightTrue);
			up.addEventListener(TouchEvent.TOUCH_BEGIN,upTrue);
			down.addEventListener(TouchEvent.TOUCH_BEGIN,downTrue);
			//----------------------------------------------------------------------------------------------//
			left.addEventListener(TouchEvent.TOUCH_END,leftFalse);
			right.addEventListener(TouchEvent.TOUCH_END,rightFalse);
			up.addEventListener(TouchEvent.TOUCH_END,upFalse);
			down.addEventListener(TouchEvent.TOUCH_END,downFalse);
			//----------------------------------------------------------------------------------------------//
			left.addEventListener(TouchEvent.TOUCH_OUT,leftOut);
			right.addEventListener(TouchEvent.TOUCH_OUT,rightOut);
			up.addEventListener(TouchEvent.TOUCH_OUT,upOut);
			down.addEventListener(TouchEvent.TOUCH_OUT,downOut);
			//----------------------------------------------------------------------------------------------//
			stage.addEventListener(Event.ENTER_FRAME,moveTank);
			for (var i:int = 0; i < map.numChildren; i++)
			{
				platforms.push(map.getChildAt(i));
			}
		}
		public function leftTrue(e:TouchEvent)
		{
			_left = true;
			tank.gotoAndStop("left");
		}
		public function rightTrue(e:TouchEvent)
		{
			_right = true;
			tank.gotoAndStop("right");
		}
		public function upTrue(e:TouchEvent)
		{
			_up = true;
			tank.gotoAndStop("up");
		}
		public function downTrue(e:TouchEvent)
		{
			_down = true;
			tank.gotoAndStop("down");
		}
		//----------------------------------------------------------------------------------------------//
		public function leftFalse(e:TouchEvent)
		{
			_left = false;
		}
		public function rightFalse(e:TouchEvent)
		{
			_right = false;
		}
		public function upFalse(e:TouchEvent)
		{
			_up = false;
		}
		public function downFalse(e:TouchEvent)
		{
			_down = false;
		}
		//----------------------------------------------------------------------------------------------//
		public function leftOut(e:TouchEvent)
		{
			_left = false;
		}
		public function rightOut(e:TouchEvent)
		{
			_right = false;
		}
		public function upOut(e:TouchEvent)
		{
			_up = false;
		}
		public function downOut(e:TouchEvent)
		{
			_down = false;
		}
		//----------------------------------------------------------------------------------------------//
		public function moveTank(e:Event)
		{
			if (_left)
			{
				tank.x -=  Speed;
			}
			if (_right)
			{
				tank.x +=  Speed;
			}
			if (_up)
			{
				tank.y -=  Speed;
			}
			if (_down)
			{
				tank.y +=  Speed;
			}
			detection(tank);
		}
		public function detection(_tank)
		{
			//перебираем все платформы и проверяем пересечение с персонажем
			for (var p:int = 0; p < platforms.length; p++)
			{
				platform = platforms[p];
 
				if (_tank.left.hitTestObject(platform))
				{
					_left = false;
				}
				if (_tank.right.hitTestObject(platform))
				{
					_right = false;
				}
				if (_tank.up.hitTestObject(platform))
				{
					_up = false;
				}
				if (_tank.down.hitTestObject(platform))
				{
					_down = false;
				}
			}
		}
	}
}

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

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

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


 


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


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