dadafgf 2019-01-22 11:46 采纳率: 100%
浏览 624
已采纳

AnimateCC H5怎么用event.offsetX/Y实现同步拖拽?

想用AnimateCC H5来研究一下event.offsetX/Y,大致概念是两个点连成一条线,拖拽Cpoint1可控制两个点与线的整体拖动,拖拽Cpoint2可控制线的方向与长短。

this.stop();
var home = this;

var ShapeLine1 = new createjs.Shape(); 
var graphics1 = ShapeLine1.graphics;
graphics1.beginStroke("white");
graphics1.setStrokeStyle(3); 
graphics1.moveTo(home.Linepoint1.x, home.Linepoint1.y);
graphics1.lineTo(home.Linepoint2.x, home.Linepoint2.y);

home.addChild(ShapeLine1);
init();

home.Linepoint1.addEventListener("mousedown", StartLine1)
home.Linepoint1.addEventListener("pressup", StopLine1)

function StartLine1()
{
    canvas.addEventListener('mousemove', MoveLine1)
}

function StopLine1()
{
    canvas.removeEventListener('mousemove', MoveLine1)
}

function MoveLine1(event)
{
    var e = event

    home.Linepoint1.x = stage.mouseX / stage.scaleX
    home.Linepoint1.y = stage.mouseY / stage.scaleY

    home.Linepoint2.x = e.offsetX + (home.Linepoint2.x - home.Linepoint1.x)
    home.Linepoint2.y = e.offsetY + (home.Linepoint2.y - home.Linepoint1.y)

    init();
}
/**这段本意是想通过获取鼠标事件的坐标,加上两点坐标的差值来定位新的Linepoint2,现在就出现个问题,Linepoint1在拖动的时候,Linepoint2的坐标在事件中会不断放大**/


home.Linepoint2.addEventListener("mousedown", StartLine2)
home.Linepoint2.addEventListener("pressup", StopLine2)

function StartLine2()
{
    canvas.addEventListener('mousemove', MoveLine2)
}

function StopLine2()
{
    canvas.removeEventListener('mousemove', MoveLine2)
}

function MoveLine2()
{
    home.Linepoint2.x = stage.mouseX / stage.scaleX
    home.Linepoint2.y = stage.mouseY / stage.scaleY
    init();
}


function init(){
    graphics1.clear();
    graphics1.beginStroke("white");
    graphics1.setStrokeStyle(3);
    graphics1.moveTo(home.Linepoint1.x, home.Linepoint1.y);
    graphics1.lineTo(home.Linepoint2.x, home.Linepoint2.y);
    }

我是设计师所以只能明白AnimateCC H5中的编程逻辑,还请大神指点!

  • 写回答

1条回答 默认 最新

  • u012474226 2019-01-22 13:51
    关注

    解决了,在命令function MoveLine1()中加入点位绑定,创建Cp1.x/y,再用home.Linepoint1.x-Cp1.x

    function MoveLine1()
    {
    var Cp1 = {
    x: (home.Cpoint2.x - home.Cpoint1.x),
    y: (home.Cpoint2.y - home.Cpoint1.y)
    }

    home.Linepoint1.x = stage.mouseX / stage.scaleX
    home.Linepoint1.y = stage.mouseY / stage.scaleY
    
    home.Linepoint2.x = home.Linepoint1.x-Cp1.x
    home.Linepoint2.y = home.Linepoint1.y-Cp1.y
    
    init();
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#网络安全#的问题:求ensp的网络安全,不要步骤要完成版文件
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥20 使用Photon PUN2解决游戏得分同步的问题
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM