一 : 前言
这几天在Game中遇到这几个需求 , 发送订单后玩家的金币需要增加,这个时候需要做一个飞金币的效果.如下图所示:
二 : 问题
很明显按钮的父容器和金币信息所在的父容器不是同一个父容器.但是金币移动的路径需要在同一个坐标系之中.
三 : 解决思路
将按钮和金币的相对坐标转成世界坐标,飘金币的效果在世界"Canvas"中播放
四 : 具体解决:
① , 获取当前Canvas
let $parent : cc.Node = cc.find("Canvas");
② , 获取路径终点坐标 1`$targetNode 既是几笔对象
2`无论$targetNode的锚点在哪 , 坐标转换都是以其左下为原点的.这个和Egret一样.
$end_pos = $targetNode.convertToWorldSpace( new cc.Vec2( $targetNode.width / 2 , $targetNode.height / 2 ) );
$end_pos.x -= ($parent.width / 2);
$end_pos.y -= ($parent.height / 2);
========================================================================================== 更新(待测试 ......) 节点坐标与世界坐标的转化方法有: convertToNodeSpace(worldPoint);//将世界坐标转换为模型坐标。
convertToNodeSpaceAR(worldPoint);//将世界坐标转换为模型坐标。AR表示相对于锚点。
convertTouchToNodeSpace(touch);//将世界坐标中触摸点转换为模型坐标。
convertTouchToNodeSpaceAR(touch);//将世界坐标中触摸点转换为模型坐标。AR表示相对于锚点。
convertToWorldSpace(nodePoint);//将模型坐标转换为世界坐标。
convertToWorldSpaceAR(nodePoint);//将模型坐标转换为世界坐标。AR表示相对于锚点。
============================= 屏幕转世界 camera.getScreenToWorldPoint(point,out); 世界转屏幕 camera.getWorldToScreenPoint(point,out);