热门标签 | 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太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
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社区 版权所有