热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【CocosCreator】摄像机移动碰到的一些问题

1.摄像机移动时,GameOver图片不会移动,导致GameOver半屏显示,怎么办?解决思路:改变camera的cull

1.摄像机移动时,GameOver图片不会移动,导致GameOver半屏显示,怎么办?

解决思路:改变camera的culling mask,使得主相机不渲染UI,另外设置一个静止相机渲染UI。

步骤:

  • 将包括GameOver在内的所有不会移动的UI的Group设置为“UI”(自己命名)。
  • 在main camera的culling mask中,去掉“UI”层级。
  • 新建一个camera,命名“UI Camera”,在它的culling mask中,只勾选“UI”层级。

2.如何在一个脚本中调用另一个脚本中的函数?(例:我要在“shootControl”脚本中调用“cameraControl”的Init()方法)

解决思路:在"shootControl"中获得"cameraControl",然后直接调用。

步骤:

  • 此时shootControl和cameraControl分别被绑定在两个不同的Node上(也可以在同一个node上啦,看情况)。
  •  导入cameraControl类,使得shootControl可以识别cameraControl类型。

var cameraControl = require("cameraControl");

  • 设置cameraControl类型的变量,在属性检查器面板上,将脚本拖拽上去。

cameraControl:{default:null,type:cameraControl},

  • 可以直接调用cameraControl里面的函数了

this.cameraControl.SmoothCameraPos(this.startPos,this.correctPos); //更改相机位置

3.如何使得摄像机平滑移动到另一个位置?

解决思路:使用动作系统,给定targetPos和时间,调用API即可。

SmoothCameraPos(startPos){ var tartgetPos=cc.v2(startPos.x+this.addX,startPos.y+this.addY);var action = cc.moveTo(this.perMoveTime,tartgetPos);this.node.runAction(action);},

4.如何使得某物体始终处于摄像机的某个位置(非中央)?

(1)已知该物体的世界坐标:this.startPos

(2)已知摄像机的世界坐标为(0,0),在属性检查器上改anchor值是没有用的。在场景中也看不出来摄像机的渲染平面有多大,可以推测出width和height暂时和设计分辨率相同,机型不同,相应也会变化。而默认anchor在(0.5,0.5)。

(3)若直接将摄像机的position设置为该物体的position,可以看到该物体为于相机正中央(1/2height、1/2width),好像是(0.5,0.5)锚点和该物体锚点重合了。

(4)我希望在外面暴露出来两个参数:posRatioX、posRatioY,分别代表该物体始终占据屏幕X轴、Y轴的比例位置。比如填写(0.5,0.25)时,位置如图:

onLoad(){this.addX=this.canvas.width*(0.5-this.posRatioX);this.addY=this.canvas.height*(0.5-this.posRatioY);},InitCameraPos(startPos,nextPos){this.node.x=startPos.x+this.addX;//若不加 add值,则 起点处于相机正中央this.node.y=startPos.y+this.addY;},

老实说,上面这个相加公式是我猜出来的。我们来看看,设置posRatioY为x,addY为y。则已知,x=0.5,y=0; x=0.25,y=0.25*height;x=0.75,y=-0.25*height。就这样,根据这三组值,我猜出了这个公式。(自己的几何比较差,于是用代数解出了这道题的感觉。)

5.如何判断鼠标/触摸点和场景中物体的距离?

解决思路:先搞清楚触摸点的坐标系和场景中物体的坐标系之间的差异,再将它们转换到同一个坐标系下。

具体解决步骤:

(1)鼠标触摸点的坐标系:看了官方关于摄像机的坐标转换的解释之后,我发现,触摸点所处的是摄像机坐标系,即不管相机在场景中如何移动,它的坐标系都是以屏幕左下角为原点。

(2)根节点的position是世界坐标。子节点的position是本地坐标,以父节点的anchor位置为坐标原点。

(3)将鼠标触摸点和物体的坐标都统一到世界坐标下:

A.触摸点:

this.cameraControl.node.getComponent(cc.Camera).getCameraToWorldPoint(event.touch.getLocation(), this.mousePos);

B.物体坐标:

将我要操作的物体的父物体的anchor设置在世界坐标系的原点处。

 


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • ServiceStack与Swagger的无缝集成指南
    本文详细介绍了如何在ServiceStack项目中集成Swagger,以实现API文档的自动生成和在线测试。通过本指南,您将了解从配置到部署的完整流程,并掌握如何优化API接口的开发和维护。 ... [详细]
author-avatar
学银先生_512
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有