Cocos Creator 拖动去指定区域
我们要实现的效果是,按住并拖动一个小物体,物体跟随手指(鼠标)移动。
拖到指定位置放下。如果没有到指定位置,则回到上一个位置。
新建脚本DragToTarget.ts,挂到预制体上。
const { ccclass, property } = cc._decorator;
@ccclass
export default class DragToTarget extends cc.Component {
@property(cc.Label)
nameLabel: cc.Label = null;
@property(cc.Node)
targetOfDragList: cc.Node[] = [];
_oldPos = null; // 上一个位置
start() {
this._oldPos = this.node.position;
}
onEnable() {
this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this);
this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnd, this);
}
onDisable() {
this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this);
this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnd, this);
}
// update (dt) {}
_onTouchMove(touchEvent) {
let location = touchEvent.getLocation();
this.node.position = this.node.parent.convertToNodeSpaceAR(location); // 确定位置
}
_onTouchEnd(touchEvent) {
if (this.targetOfDragList.length === 0) {
return; // 没有目标位置
}
let inTarget = false;
for (const targetNode of this.targetOfDragList) {
if (this._withinTarget(targetNode, touchEvent)) {
inTarget = true;
break;
}
}
if (!inTarget) {
this.node.position = this._oldPos; // 回去
}
}
// 判断触摸事件是否在槽位里
_withinTarget(targetNode: cc.Node, touchEvent) {
let rect = targetNode.getBoundingBox();
let location = touchEvent.getLocation();
let point = targetNode.parent.convertToNodeSpaceAR(location);
return rect.contains(point);
}
}
思路与之前的拖动类似。
在最后TOUCH_END
的时候,判断自己是否在目标区域内。
如果不在则返回上一个坐标。
在场景中使用
import DragToTarget from "./DragToTarget";
const { ccclass, property } = cc._decorator;
@ccclass
export default class DragToControl extends cc.Component {
@property(cc.Prefab)
drag_to_item: cc.Prefab = null;
@property(cc.Node)
dragTargets: cc.Node[] = [];
itemNum = 1;
start() {
this.createItem();
}
// update (dt) {}
createItem() {
let d = cc.instantiate(this.drag_to_item);
this.node.addChild(d);
let dragTo = d.getComponent(DragToTarget);
dragTo.targetOfDragList = this.dragTargets; // 设置目的地
dragTo.nameLabel.string = '' + this.itemNum++;
}
}
参考:
Cocos Creator: https://rustfisher.com/categories/CocosCreator/
一个软件工程师的记录
分类:
CocosCreator
标签:
CocosCreator
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!