Создание изображений с использованием фигур - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь создать модуль перетаскивания, который можно использовать для создания изображения. Пример: Использование треугольника и прямоугольника для создания Дома.

Я создал модуль перетаскивания, но не могу исправить их друг с другом.

Будет очень полезно, если кто-то может дать мне идею или пример кода для этой проблемы. Пожалуйста, помогите мне в этом.

Я немного объясню функциональность, но простите мой английский, если возникнут ошибки, так как это не мой родной язык. Пользователю предоставляется набор фигур и вопрос типа «СОЗДАТЬ ДОМ», поэтому он должен иметь возможность перетаскивать формы, которые дали и построим дом.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 24 мая 2011

Используйте это как базовый класс для ваших перетаскиваемых объектов:

package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class Dragable extends Sprite
    {
        // vars
        private const SNAP:uint = 40;

        /**
         * Constructor
         */
        public function Dragable()
        {
            addEventListener(MouseEvent.MOUSE_DOWN, _drag);
            addEventListener(MouseEvent.MOUSE_UP, _drop);
        }

        /**
         * MOUSE_DOWN
         */
        private function _drag(e:MouseEvent):void
        {
            startDrag();
        }

        /**
         * MOUSE_UP
         */
        private function _drop(e:MouseEvent):void
        {
            stopDrag();

            x = Math.round(x / SNAP) * SNAP;
            y = Math.round(y / SNAP) * SNAP;
        }
    }
}

Измените SNAP в соответствии с вашими требованиями.

1 голос
/ 24 мая 2011

если вы хотите привязать части дома к сетке, скажем, 50 пикселей помещают эти уравнения в событие мыши вверх

box.x = Math.floor (mouseX / 50) * 50;

box.y = Math.floor (mouseY / 50) * 50;

<code>
box.addEventListener(MouseEvent.MOUSE_UP,mUp)
function mUp(e:MouseEvent)
{
    box.stopDrag();
    box.x = Math.floor(mouseX/50)*50;
    box.y = Math.floor(mouseY/50)*50;
}

, которые будут соединять части вместе

0 голосов
/ 24 мая 2011

Для чего-то подобного (игнорируя перетаскивание, для которого у вас есть несколько хороших примеров), вы настраивали все это ранее.

Скажите, что ваша цель - построить дом.Здесь вы должны собрать части заранее и сохранить конечную позицию и поворот в XML или что-то подобное.Когда вы перетаскиваете фигуры в игре, вам просто нужно проверить, достаточно ли она близка к конечной позиции, и если это так, просто привязать ее к конечной позиции.Вы можете работать во вращении достаточно легко (хотя я бы оставил углы равными 45 градусам для упрощения).

В качестве идеи для положения:

private var m_finalPos:Point    = new Point( 10.0, 10.0 );
private var m_snapDist:Number   = 100.0;

private function _onDrop( e:MouseEvent ):void
{
    // get the distance squared (quicker, and we don't really care about the distance)
    var diffX:Number = this.m_finalPos.x - this.x;
    var diffY:Number = this.m_finalPos.y - this.y;
    var distSq:Number = ( diffX * diffX ) + ( diffY * diffY );

    // if we're close enough, snap to the final position
    if( distSq < this.m_snapDist )
    {
        this.x = this.m_finalPos.x;
        this.y = this.m_finalPos.y;
    }
}

Опустите snapDist, чтобы сделать его сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...