我试图创建一个可用于构建Image的拖放模块。 EX:使用三角形和矩形创建一个House。
我已经创建了拖放模块,但我不能让它们相互修复。
如果有人可以就此问题给我一个想法或示例代码,那将是一个很大的帮助。 请帮助我。
我会稍微解释一下这个功能,但如果有任何错误,请原谅我的英语,因为它不是我的母语。 给用户一组形状和一个问题,如“创建一个房子”,所以他应该能够拖动形状 给予并建造房屋。
先谢谢。
答案 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以使其更难。