Cocos creator 世界坐标转屏幕坐标

Cocos creator某一坐标转屏幕坐标(screen position),以前都是屏幕坐标转世界坐标。
先上代码为敬(只是提供一种思路,有更好的实现和建议欢迎留言)

    //Scene的设计分辨率是640*1136,适配方案是Fit width,所以下面的缩放按sW来计算的。
    //其他情况没有测试,情况应该差不多。先讲明适用条件,其他条件测试成功的欢迎留言。
    let size = this.panel.node.getContentSize();//panel的坐标转为屏幕坐标
    let width = size.width;
    let height = size.height;
    //屏幕分辨率
    let canvasSize = cc.view.getCanvasSize();
    //scene的设计分辨率
    let desiginSize = cc.view.getDesignResolutionSize();
    //Fit width适配方案,以width作为缩放基准
    let sW = (canvasSize.width / desiginSize.width);
    //计算panel在屏幕中的尺寸
    width = sW * width;
    height = sW * height;
    //转为世界坐标    
    let worldPos =  Wb.Pos.localConvertWorldPointAR(this.panel.node);
    let outPos = cc.v2();
    //设置scene的camera
    this.camera.getWorldToScreenPoint(worldPos, outPos);
    //x,y即屏幕坐标,creator的坐标原点在坐下,Android的在左上,需要做个转换。
    //x轴不变,y轴画布高减去y对应比例的值即为屏幕y坐标。(宽高都以sW为比例计算)
    let x = (outPos.x * sW) - (width / 2);
    let y = canvasSize.height - (outPos.y * sW) - (height / 2);

以上是获取屏幕坐标的代码,代码简陋只提供一种思路,不同机型测试显示的内容都会正确覆盖在panel上。

Chatgpt生成的结果
[Cocos Creator中世界坐标转屏幕坐标的逻辑是使用convertToWorldSpaceAR()方法,该方法可以将节点坐标转换为世界坐标,然后再使用camera.convertToUINode()方法,该方法可以将世界坐标转换为UI节点坐标,最后再使用UI节点的convertToWorldSpaceAR()方法,该方法可以将UI节点坐标转换为屏幕坐标]。例如,如果要将一个Sprite的坐标转换为屏幕坐标,可以这样写:

//假设sprite是一个Sprite对象
//获取sprite的世界坐标
let worldPos = sprite.convertToWorldSpaceAR(cc.v2(0, 0));
//获取主摄像机
let camera = cc.Camera.main;
//获取UI节点
let uiNode = camera.getUINode();
//将世界坐标转换为UI节点坐标
let uiPos = camera.convertToUINode(worldPos, uiNode);
//将UI节点坐标转换为屏幕坐标
let screenPos = uiNode.convertToWorldSpaceAR(uiPos);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容