![]() |
|
||||||||||
|
|||||
|
Я новичок, уже много чего изучил, но со столкновением не сталкивался. Еле нашёл поиск на этом сайте) Там вывелось много тем я посмотрел, но не одна тема не подходит к моей ситуации. Вообщем как сделать столкновение как в этой игре? Цель не скопировать игру, как подумают не которые а понять, как это работает. Ещё еслив это реализовано при помощи box2d то можно как нить по другому, без box2d? box2d - я пробовал изучить или даж хотя бы понять, но пока трудно, потому что не могу освоить, понять class,ы.
|
|
|||||
|
Например так: хранить в модели текущее состояние доски, как двумерный массив булевых значений – ячейка свободна / занята. Про каждый блок мы можем сказать на каких координатах он находится и как сориентирован (вертикально / горизонтально). Этих данных достаточно, чтобы сформировать dragRect (если осуществлять перетаскивание методом startDrag). После отпускания кнопки мышки, смотрим на текущие визуальные координаты блока, вычисляем соответствующие координаты в модели, подгоняем их до целых и перемещаем блок на положенное место. Обновляем модель.
|
|
|||||
|
Нет ли на этом форуме подобной темы? что бы хотя бы понять не которые ваши слова. Допустим эти "хранить в модели текущее состояние доски". Щас по гуглю/поищу на сайте, отпишусь о результатах. Спасибо за ответ.
Добавлено через 7 минут Вот пока что реализовано: 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; } } |
|
|||||
|
Цитата:
__________________
... |
|
|||||
|
Александр Мостовой, спасибо за ответ. а что означает freeHeight?
Добавлено через 24 минуты со startDrag разобрался, огромнейшее спасибо) щас буду думать над столкновением. |
|
|||||
|
Цитата:
startDrag(false, rectangle); rectangle - это прямоугольник в пределах которого вы можете таскать объект. В вашем случае он совпадает с обстью объекта + дополнительное поле Цитата:
__________________
... |
|
|||||
|
Цитата:
|
|
|||||
|
Александр Мостовой, да с MVC напряг не могу понять смысла его использования, точнее как он действует. Щас по гуглю мож дойдёт.
caseyryan, учту спасибо. |
|
|||||
|
Цитата:
![]() Суть в том что вам нужно решить для начала задачу на уровне логики-математики - без какого либо визуального представления. У вас есть некторое абстрактное поле 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
__________________
... |
|
|||||
|
Александр Мостовой, спасибо щас буду разбираться, я уже думал, что придётся изучать MVC))) это получается как массив, точнее управлять массивами? вот нашёл про Array
var oneArray:Array = new Array("a", "b", "c"); var twoArray:Array = oneArray; twoArray[0] = "z"; trace(oneArray); Сори, сразу и не понял это же многомерные массивы) Добавлено через 10 минут так, всё я понял как этим пользоваться. Вот: 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 минуту вот у меня кодик получился: 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, время: 09:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|