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