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

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

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

Регистрация: Apr 2013
Сообщений: 40
Отправить сообщение для WinSTOP с помощью Skype™
Question Необычное столкновение

Я новичок, уже много чего изучил, но со столкновением не сталкивался. Еле нашёл поиск на этом сайте) Там вывелось много тем я посмотрел, но не одна тема не подходит к моей ситуации. Вообщем как сделать столкновение как в этой игре? Цель не скопировать игру, как подумают не которые а понять, как это работает. Ещё еслив это реализовано при помощи box2d то можно как нить по другому, без box2d? box2d - я пробовал изучить или даж хотя бы понять, но пока трудно, потому что не могу освоить, понять class,ы.

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Например так: хранить в модели текущее состояние доски, как двумерный массив булевых значений – ячейка свободна / занята. Про каждый блок мы можем сказать на каких координатах он находится и как сориентирован (вертикально / горизонтально). Этих данных достаточно, чтобы сформировать dragRect (если осуществлять перетаскивание методом startDrag). После отпускания кнопки мышки, смотрим на текущие визуальные координаты блока, вычисляем соответствующие координаты в модели, подгоняем их до целых и перемещаем блок на положенное место. Обновляем модель.

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

Регистрация: Apr 2013
Сообщений: 40
Отправить сообщение для WinSTOP с помощью Skype™
Нет ли на этом форуме подобной темы? что бы хотя бы понять не которые ваши слова. Допустим эти "хранить в модели текущее состояние доски". Щас по гуглю/поищу на сайте, отпишусь о результатах. Спасибо за ответ.

Добавлено через 7 минут
Вот пока что реализовано:
Код AS3:
mascot.addEventListener(MouseEvent.MOUSE_DOWN, startMascotDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, stopMascotDrag);
mascot.addEventListener(Event.ENTER_FRAME, dragMascot);
 
var clickOffset:Point = null;
 
function startMascotDrag(event:MouseEvent) {
clickOffset = new Point(event.localX, event.localY);
}
 
function stopMascotDrag(event:MouseEvent) {
clickOffset = null;
}
 
function dragMascot(event:Event) {
if (clickOffset != null) {
mascot.x = mouseX - clickOffset.x;
}
}

Старый 06.04.2013, 21:22
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 4  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Цитата:
но пока трудно, потому что не могу освоить, понять class
В AS3 есть встроенній методо startDrag позволяющий таскать объект автоматически в указаной области
Код AS3:
			function mouseDownHandler(event:Event):void
			{
				startDrag(false, new Rectangle(0, 0, width, height + freeHeight);
			}
 
			function mouseUpHandler(event:Event):void
			{
				stopDrag();
				fitToPosition();
			}
__________________
...

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

Регистрация: Apr 2013
Сообщений: 40
Отправить сообщение для WinSTOP с помощью Skype™
Александр Мостовой, спасибо за ответ. а что означает freeHeight?

Добавлено через 24 минуты
со startDrag разобрался, огромнейшее спасибо) щас буду думать над столкновением.

Старый 06.04.2013, 22:58
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 6  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Цитата:
Александр Мостовой, спасибо за ответ. а что означает freeHeight?
Ну свободное поле для ваших плиток
startDrag(false, rectangle);
rectangle - это прямоугольник в пределах которого вы можете таскать объект. В вашем случае он совпадает с обстью объекта + дополнительное поле

Цитата:
что бы хотя бы понять не которые ваши слова. Допустим эти "хранить в модели текущее состояние доски"
Речь шла о шаблоне программирования. Смысл в том что бы логику игры высчитывать в отдельной структуре кода, не связанной с отрисовкой и конкретными визуальными объектами. Рано или поздно при усложнении логики придется перейти на такую структуру. Ключевые слова для поиска MVC (Model View Controller)
__________________
...

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Еле нашёл поиск на этом сайте) Там вывелось много тем я посмотрел, но не одна тема не подходит к моей ситуации.
Не надо пользоваться поиском на форуме, он в этих движках форума полный отстой. Лучше правильно пользоваться гуглом. Для поиска с помощью гугла на этом форуме нужно писать так: ваш поисковый запрос site:flasher.ru пример

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

Регистрация: Apr 2013
Сообщений: 40
Отправить сообщение для WinSTOP с помощью Skype™
Александр Мостовой, да с MVC напряг не могу понять смысла его использования, точнее как он действует. Щас по гуглю мож дойдёт.
caseyryan, учту спасибо.

Старый 07.04.2013, 11:12
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 9  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Цитата:
Сообщение от WinSTOP Посмотреть сообщение
Александр Мостовой, да с MVC напряг не могу понять смысла его использования, точнее как он действует. Щас по гуглю мож дойдёт.
caseyryan, учту спасибо.
В общем не заморачивайтесь пока над этим
Суть в том что вам нужно решить для начала задачу на уровне логики-математики - без какого либо визуального представления. У вас есть некторое абстрактное поле
Код AS3:
var modelScene:Array= 
[ 
				1,0,1,1,1,0,
				1,0,0,0,0,0,
				1,0,0,0,0,0,
				0,1,0,1,0,0,
				0,1,0,1,0,0,
				0,1,0,1,0,0
			]
И вам нужно используя абстрактные данные двигать эти виртуальные нолики и единички.
После того как сможете решить на уровне математики, потом просто будет передавать в StartDrag rectangle который легко можно будет вычислить умножая число клеточек на ширину ячейки . Если поступите таким образом сможете вдальнейшем отрисовывать объекты хоть в пикселях, хоть в 3Д, будет очень просто генерировать уровни.

Вы могли бы тут, конечно, "схалявить" и просто прибавлять к текущему rectangle объекта расстояние до ближайших границ по наибольшей длине, но это тупиковый путь.


Да, термин который вы используете - столкновение - совершенно не подходит к задаче. Не знаю какой другой предложить, но столкновения относятся больше к физике, у вас просто свободная область и rectanglesIntersection
__________________
...

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

Регистрация: Apr 2013
Сообщений: 40
Отправить сообщение для WinSTOP с помощью Skype™
Александр Мостовой, спасибо щас буду разбираться, я уже думал, что придётся изучать MVC))) это получается как массив, точнее управлять массивами? вот нашёл про Array
Код AS3:
 var oneArray:Array = new Array("a", "b", "c");
 var twoArray:Array = oneArray;
 twoArray[0] = "z";             
 trace(oneArray);
Добавлено через 2 минуты
Сори, сразу и не понял это же многомерные массивы)

Добавлено через 10 минут
так, всё я понял как этим пользоваться.
Вот:
Код AS3:
 var oneArray:Array= 
[ 
				1,0,1,1,1,0,
				1,0,0,0,0,0,
				1,0,0,0,0,0,
				0,1,0,1,0,0,
				0,1,0,1,0,0,
				0,1,0,1,0,0
			];
 var twoArray:Array = oneArray;
 twoArray[1] = "1";             
 trace(oneArray);
и у нас получится
1,1,1,1,1,0, // изменилось второе число.
1,0,0,0,0,0,
1,0,0,0,0,0,
0,1,0,1,0,0,
0,1,0,1,0,0,
0,1,0,1,0,0
Я научился управлять, что дальше? нужно их передавать в StartDrag?

Добавлено через 31 минуту
вот у меня кодик получился:
Код AS3:
var oneArray:Array= 
[ 
				1,1,1,1,1,1,
				0,0,0,0,0,0,
				1,0,0,0,0,0,
				0,1,0,1,0,0,
				0,1,0,1,0,0,
				0,1,0,1,0,0
			];
 var twoArray:Array = oneArray; 
 twoArray[5] = twoArray[1];   
 trace(oneArray);
 mascot2.y = twoArray[6] + twoArray[11];
 
 
var LOCKY:Number = mascot2.y;
 
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, _mouseMove);
function _mouseMove(e:MouseEvent):void
{
    if(mascot2.y != LOCKY) mascot2.y = LOCKY;
}
 
mascot2.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDown);
function _mouseDown(e:MouseEvent):void
{
    mascot2.startDrag();
}
 
stage.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
function _mouseUp(e:MouseEvent):void
{
    mascot2.stopDrag();
    mascot2.removeEventListener(MouseEvent.MOUSE_UP, _mouseUp);
}
ток до меня не доходит как этим можно пользоваться)


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

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

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


 


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


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