这里是用一个组件作为替身,实现一个组件拖拽到另一个组件身上实现交换的效果

this.ui.m_RightPad.m_HeroAdd.m_Paint.draggable = true;//设置可拖拽
 this.ui.m_RightPad.m_HeroAdd.m_Paint.on(fgui.Event.DRAG_START, this.onDragStart, this);//拖动开始回调
this.ui.m_RightPad.m_HeroAdd.on(fgui.Event.DROP, this.onDrop, this);//其它组件拖动到当前组件回调
//拖动开始回调
 private onDragStart(evt: fgui.Event): void {
        let paint = <UI_EndlessPaint>evt.initiator;//拖动的item
        paint.stopDrag();//取消对原目标的拖动,换成一个替代品
        fgui.DragDropManager.inst.startDrag(paint, UI_EndlessPaint.URL, paint.m_Name.data);//参数:拖动的item,拖动的item在编辑器的路径,传输的信息,这是指拖动的item编号
        //给替代品初始化信息
        const item = <UI_EndlessPaint>((<any>fgui.DragDropManager.inst.dragAgent).component);//获得拖拽产生的替代组件
        this.updateHeroPaintItemInfo(item, paint.m_Name.data);//初始化组件显示内容(使跟随手指的替代品和原组件信息显示保持一致)
    }
    //拖动到目标item回调
private onDrop(target: UI_EndlessHeroAddBtn, data: any): void {
        //原item编号和目标item编号在该数组中的下标
        let index1 = this.infinityIdentity.indexOf(target.data);
        let index2 = this.infinityIdentity.indexOf(data);
        //将拖拽的两个item对应的信息数组元素交换,并刷新显示
        [this.infinityIdentity[index1], this.infinityIdentity[index2]] = [this.infinityIdentity[index2], this.infinityIdentity[index1]];
        this.updateHeroPlayedInfo();
    }
Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐