使用形状创建图像

时间:2011-05-24 04:18:08

标签: c# wpf flash flex3

我试图创建一个可用于构建Image的拖放模块。 EX:使用三角形和矩形创建一个House。

我已经创建了拖放模块,但我不能让它们相互修复。

如果有人可以就此问题给我一个想法或示例代码,那将是一个很大的帮助。 请帮助我。

我会稍微解释一下这个功能,但如果有任何错误,请原谅我的英语,因为它不是我的母语。 给用户一组形状和一个问题,如“创建一个房子”,所以他应该能够拖动形状 给予并建造房屋。

先谢谢。

3 个答案:

答案 0 :(得分:1)

如果你想把房子片断到网格,让我们说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;
}

将适合各种作品

答案 1 :(得分:1)

将此作为可拖动对象的基类:

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以满足您的要求。

答案 2 :(得分:0)

对于这样的事情(忽略拖拽,你已经在这里得到了一些很好的例子),你先设置了这一切。

说你的目标是建房子。在这里,您需要预先组装这些碎片,并以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以使其更难。