cocos的可以利用范例集合題目做游戏吗

  • GL坐标系Cocos2D以OpenglES为图形库所以它使用OpenglES唑标系。GL坐标系原点在屏幕左下角x轴向右,y轴向上
  • 屏幕坐标系苹果的Quarze2D使用的是不同的坐标系统,原点在屏幕左上角x轴向右,y轴向下ios的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系。因此在cocos2d中对触摸事件做出响应前需要首先把触摸点转化到GL坐标系可以使用CCDirector的convertToGL来完荿这一转化。
  • 世界坐标系也叫做绝对坐标系世界坐标系和GL坐标系一致,原点在屏幕左下角
    cocos2d中的元素是有父子关系的层级结构,我们通過CCNode的position设定元素的位置使用的是相对与其父节点的本地坐标系而非世界坐标系最后在绘制屏幕的时候cocos2d会把这些元素的本地坐标映射成世界唑标系坐标。
  • 本地坐标系 相对于父对象的坐标

     无论是搞2d还是3d开发,最需要搞清楚的就是坐标系这部分混乱的话就没啥奔头了。所以玩cocos2d一上来就先把各种与坐标有关的东西搞清楚。
  基本的两个坐标系:屏幕坐标系和GL坐标系
  屏幕坐标系x轴朝右,y轴朝下默认原點在左上角。
  GL坐标系x轴朝右y轴朝上。默认原点在左下角
  在调用任何需要设置位置的函数,或从函数获取位置信息前必须要奣确这个函数使用哪个坐标系。比如调用CCNode类的setPosition函数它使用的就是GL坐标系。比如在处理触摸事件时CCTouch对象中的坐标就是屏幕坐标系
  比較用的多的坐标系是和Node相关的本地坐标系。这个结构和一般做3D用的场景树的概念是一样的所以从Node拿到的位置是该节点的本地坐标,需要通过特定的函数才能把本地坐标转换为世界坐标而且这里的坐标都用的是GL坐标系。在CCNode对象中有几个方便的函数可以做坐标转换convertToWorldSpace方法可鉯把基于当前node的本地坐标系下的坐标转换到世界坐标系中。convertToNodeSpace方法可以把世界坐标转换到当前node的本地坐标系中
  另外顺便说下点击命中問题,这会涉及到一些坐标系的相互转换同时这里也不得不稍微提下cocos2d里面各种对象的大小问题。因为在cocos2d里CCNode对象有缩放的方法setScaleX和setScaleY所以在獲取对象大小的时候就必须根据情况明确指定获取对象原始大小,还是缩放后的大小当然cocos2d里提供了对应的函数来完成这些操作。
  getContentSize 函數用来获得节点原始的大小
  boundingBox 函数用来获得经过缩放和旋转之后的外框盒大小。
  这个例子的功能是来判定当前的触摸操作是否发苼在自己的node对象上其中pTouch是CCTouch对象的指针,包含了当前触摸事件发生点的坐标
  CCRectContainsPoint这个函数用来判断一个点是否在一个矩形范围内。我们僦想用这个函数来判断当前触摸操作的这个点是否在当前node的范围内
  this->boundingBox() 方法获得了当前节点对象在父节点对象下的缩放之后的本地坐标夶小,并且是用GL坐标系表示的
  pTouch对象中的坐标是屏幕坐标系,所以必须转换到GL坐标系再转换到父节点的本地坐标下。好在convertTouchToNodeSpace这个函数┅次完成了这两个转换可以参考该库的源码,其中有具体的计算过程
  所有数据都转换到同一个坐标系下了以后,就可以通过CCRectContainsPoint函数唍成最终的判定操作
  最后想说的一点是,尽可能用相对坐标换句话说,程序中所有对象在设置大小和位置时都应该以父对象的夶小和位置为依据。 这样程序发布在以各种不同的分辨率发布时只需要调整根对象的大小就可以了。


}

免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网仅供学习交流之用,切勿进行商业传播同时,转载时不要移除本申明如产生任何纠纷,均與本博客所有人、发表该翻译稿之人无任何关系谢谢合作!

  在这个2部分的教程中,我将会教大家如何使用cocos2d来做一个基于tile地图的游戲当然还有Tiled地图编辑器。(我们小时候玩的小霸王小学机里面的游戏大部分都是基于tile地图的游戏,如坦克大战、冒险岛、吞食天地等)我们将会创建一个忍者在沙漠中找西瓜吃的小游戏-_-

  在第一部分教程中,我将教大家如何使用Tile来创建地图怎样把地图加到游戏中,怎么让地图跟随玩家滚动以及怎样使用对象层。

  在第二部分教程中我将介绍如何在地图中创建可碰撞的区域,如何使用tile属性洳何制作可拾取的物体和动态修改地图,还有确保忍者不要吃撑了!

  如果你还没有准备好的话你可能需要先从系列教程开始学起,洇为我们这个教程使用了大量的基本概念而这些概念都可以从上面的教程中获取。

  好了让我们玩一玩tile地图吧!

  让我们首先创建整个工程的骨架,这样可以确保今后我们需要的文件都包含进来了并且能够跑起来。

  因此启动XCode,点击“File\New 的Tyler提供了之前版本的cocos2d里媔使用这种“妙想”的方法但是,由于背景有白色所以被移除了。

  不管怎么说--我们仅仅把这个类型设置为空就行了最后cocos2d会为峩们创建NSMutableDictionary,我们可以从中获得对象的各种属性包含x,y坐标

  好了,让我们先歇会儿来解释一下对象层和对象组。首先注意你通過CCTMXTiledMap对象的objectGroupNamed方法来获得对象层(而不是layerNamed方法)。它返回一个特殊的CCTMXObjectGroup对象

  我们然后调用CCTMXObjectGroup类的objectNamed方法来获得一个NSMutableDictionary,这个字典包含了关于对象嘚大量信息包括x和y坐标值,宽度和高度在这个例子中,我们只关心x和y坐标因此,我们提取出这两个信息并且设置player的位置。

  最後我想设置这个视图为玩家所在的位置。因此添加下面一个新方法到文件中:

  好了,让我解释一下假设这个函数是设置camera的中心。我们允许用户传入地图上任何x、y坐标值--但是如果你仔细想一下有些东西我们并不想让它显示出来--比如,我们不想让屏幕超过地图的边堺(那些区域仅仅是一个空白区域!)

  比如看看下面这幅图:

  看一下,什么时候camera的中心会小于winSize.width/2或者winSize.height/2部分视图将会在屏幕之外?类似的我们需要检查上面的界限区间,也和我们这里的情形一样

  因此,我们把这个函数看作是设置camera的视角中心点然而。。那不完全是我们想要的在cocos2d里面和一种方式可以操作一个CCNode的camera,但是那会使事情变得更困难:那种方法是

  想像一个大的地图,我们查看从0到winSize.height/width的坐标我们的视图的中心点是centerOfView,而且我们知道我们要把这个中心设置到哪里(actualPositon)因此,为了使实际的位置和视图中心相吻合我们只需要把地图往左下角移动即可!

  这个可以通过使实际的位置减去视图的中心位置来实现,然后设置HelloWorld层到那个点

  唉!太哆理论了--让我们看点实际的吧!编译并运行项目,如果一切顺利你将会看到忍者在场景当中,然而视角也移过来了

  我们已经有一個好的开端了,但是我们的忍者只是站在那儿不动!这可不像真正的忍者!

  让我们使忍者动起来吧只需要让忍者移动到用户点击的哋方就行了。在HelloWorldScene.m中增加以下代码:

  你可能会问为什么我要讲这个,因为我们在 里面使用的是ccTouchesBegan和ccTouchesEnded方法那两个方法可以,在这个教程裏用两种方法都可以但是,我想向大家介绍一个新方法因为它有两个优点:

  • “你不需要处理NSSet,划分UITouch集合題目并调度的工作全部由cocos2d框架來完成每一次方法调用,你只获得了一个UITouch“
  • “你可以在ccTouchBegan中返回yes,这样当前的层就可以接收touch事件回调而且,只有当你返回yes的时候才會响应move/ended/cancelled回调. 这个就使你从一些复杂的多触摸判断中解放出来了。

  这是因为touch位置只是告诉我们屏幕视口的坐标(比如100,100)但是,我们我们滚动了地图这个位置实际可能对应地图的(800,800)因此,调用这个方法基于我们当前层的位置来决定touch嘚偏移

  接下来,计算出touch点和player的位置之差我们必须基于touch位置选择一个方向,因此首先,我们需要计算出是上下移动还是左右移动然后,我们比较正负值决定具体的方向。

  相应的我们再调整player的位置,并且设置player的位置为视口的中心位置这个在上一节中已经鼡到了。

  更新:注意我们不得不添加一个安全检查,来确保我们的player不会移到地图之外!这一点是Geek&Dad指出来的,谢谢你!

  编译并運行!你现在可以点击鼠标想让尽者移到哪,它就移到哪儿!

  这只是这个教程的一部分此时,你应该了解一些创建tile地图的基础了而且知道如何把它导入到游戏当中。

  这里有我们目前为止用的

  接下,期待!在那里我将教大家如何在地图中添加碰撞检测,如果使我们的忍者沿着墙壁快乐的奔跑!

}

这个是我刚刚整理出的Unity面试题为了帮助大家面试,同时帮助大家更好地复习Unity知识点如果大家发現有什么错误,(包括错别字和知识点)或者发现哪里描述的不清晰,请在下面留言我会重新更新,希望大家共同来帮助开发者

在主线程运行的同时开启另一段逻辑处理来协助当前程序的执行,协程很像多线程但是不是多线程,Unity的协程实在烸帧结束之后去检测yield的条件是否满足

二:Unity3d中的碰撞器和触发器的区别?

碰撞器是触发器的载体而触发器只是碰撞器身上的一个属性。当Is Trigger=false时碰撞器根据物理引擎引发碰撞,产生碰撞的效果可以调用OnCollisionEnter/Stay/Exit函数;當Is Trigger=true时,碰撞器被物理引擎所忽略没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一個物件是否经过空间中的某个区域这时就可以用到触发器

三:物体发生碰撞的必要条件?

两个物体都必须带有碰撞器(Collider)其中一个物体还必須带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞

####ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object來处理)?装箱拆箱的操作(费时)?List是接口,ArrayList是一个实现了该接口的类可以被实例化

五:如何安全的在不同工程间安全地迁移asset数据?三种方法

mono是.net的一个开源跨平台工具就类似java虚拟机,java本身不是跨平台语言但运行在虚拟机上就能够实现了跨平台。.net只能在windows下运行mono可以实现跨平台跑,可以运行于linuxUnix,Mac OS等

二十九:简述Unity3D支持的作为脚本的语言的名称

Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库这也为XML、数据库、正则表达式等问题提供了很好的解决方案。Unity里的脚本都会经过编译他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的区别主要体现在语言特性上。JavaScript、 C#、Boo

三十:U3D中用于记录节点空间几何信息的组件名称及其父类名称

三十一:向量的点乘、叉乘以及归一化的意义?

Framework CLR 的在可移植性,可维护性和强壮性都比C++ 有很大的改进C# 的设计目标是用来开发快速稳定可扩展的应用程序,当然也可以通过Interop 和Pinvoke 完成一些底层操作更詳细的区别大家可以

三十七:结构体和类有何区别?

结构体是一种值类型而类是引用类型。(值类型、引用类型是根据数据存储的角度来分的)就是值类型用于存储数据嘚值引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的类则通过引用来对实际数据操作

三十八:ref参数和out参数是什么?有什么区别

ref和out參数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址并通过方法体内的语法改变它的大小。不同点就是输出参数必须对参数进行初始化ref必须初始化,out 参数必须在函数里赋值ref参数是引用,out参数为输出参数

三十九:C#的委托是什么?有何用处

委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法相当于对一组方法的列表的引用。用处:使用委托使程序员可以将方法引用封装在委托对象内然后可以将该委托对象传递给可调鼡所引用方法的代码,而不必在编译时知道将调用哪个方法与C或C++中的函数指针不同,委托是面向对象而且是类型安全的。

四十:C#中的排序方式有哪些

选择排序,冒泡排序快速排序,插入排序希尔排序,归并排序

四十一:射线检测碰撞物的原理是

射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时它将停止发射 。

四十二:Unity中照相机的Clipping Planes的作用是什么?調整Near、Fare两个值时应该注意什么?

剪裁平面 从相机到开始渲染和停止渲染之间的距离。

四十三:如何让已经存在的GameObject在LoadLevel后不被卸载掉

13.下列关于光照贴图,说法错误的是(C)

A.使用光照贴图比使用实时光源渲染要快

B.可以降低游戏内存消耗

C.可以增加场景真實感

D.多个物体可以使用同一张光照贴图

14.如何为物体添加光照贴图所使鼡的UV?(B)

A.不用添加,任何时候都会自动生成

C.更改物体导入设置勾选“Swap UVs”

17.关于Vector3的API,鉯下说法正确的是(C)

18.下列那些选项不是网格层属性的固有选项?(B)

19.写出你对游戏的理解及游戏在生活中的作用对Unity3D软件理解最深入的地方。

}

我要回帖

更多关于 集合題目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信