使用形状创建图像

问题描述

|| 我正在尝试创建一个可用于构建图像的拖放模块。 例如:使用三角形和矩形创建房屋。 我已经创建了拖放模块,但无法使其相互固定。 如果有人可以给我一个想法或示例代码解决这个问题,那将是一个很大的帮助。 请帮助我。 我会稍微解释一下该功能,但是如果有任何错误,请原谅我的英语,因为它不是我的母语。 为用户提供了一组形状以及诸如“创建房屋”之类的问题,因此他应该能够拖动 给和建造房子。 提前致谢。     

解决方法

如果您想将房屋碎片捕捉到网格,假设50像素放入这些等式 内部鼠标上移事件   box.x = Math.floor(mouseX / 50)* 50;      box.y = Math.floor(mouseY / 50)* 50;
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;
}

可以将各个部分组合在一起     ,将此用作可拖动对象的基类:

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;
        }
    }
}
修改ѭ2以满足您的要求。     ,对于这样的事情(忽略拖放,这里有一些很好的示例),您之前已经进行了所有设置。 说您的目标是盖房子。在这里,您需要预先组装零件,并将最终位置和旋转保存在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使其更难。