电玩巴士 > PSV > 软件教程 > 正文

PS Suite SDK官方开发帮助文档完整中文翻译

发布时间:2012/5/29 16:33:44 来源:电玩巴士 作者:天楼神威

论坛PSS专区

  GameEngine2D

  关于GameEngine2D

  GameEngine2D包含以下内容:
  Sce.Pss.HighLevel.GameEngine2D提供了创建简单2D游戏所需的一些函数。

  这个库被分割在两个命名空间下:
  Sce.Pss.HighLevel.GameEngine2D.Base包含各种各样的2D核心功能,比如数学库的扩展、渲染功能(子画面渲染和立即模式)、输入帮手、摄像机、字体映射、一个矩阵栈等。Sce.Pss.HighLevel.GameEngine2D包含基于Sce.Pss.HighLevel.GameEngine2D.Base构建的“游戏引擎”(场景图、调度器、行为等)。GameEngine2D库中一些更高级的方面松散的基于Cocos2D(http://www.cocos2d-iphone.org/),特别是它采用了类似的核心对象,像Director、Scheduler、ActionManager。

  这个库提供了源代码。

  GameEngine2D不包含以下内容:
  GameEngine2D没有提供任何碰撞检测功能,也许除了Sce.Pss.HighLevel.GameEngine2D.Base.Math中一些简单的通用例程。GameEngine2D没有提供任何物理功能、声音、网络等。它没有任何明确的UI系统,虽然在它之上可以简单的实现一些UI元素,例如使用它的简单文本和子画面渲染功能(在一些例子中会看到)。

  基本用法

  例子HelloSprite阐明了基本用法。

  初始化

  第一步是初始化Director,Director是一个单例,通过Director.Instance可以使你访问所有GameEngine2D全局对象。它必须通过Director.Initialize()来初始化:

  创建一个空的场景

  在初始化之后,我们需要创建一个场景图。我们可以创建的最简单的场景只是由一个Scene对象作为根节点组成的。

  循环

  由于我们准备好运行了,所以我们可以这样创建主循环:

  高级的循环

  作为一种选择,我们也可以手动处理循环。在那种情况下你要负责按适当的顺序调用Director.Instance的Update(),Render()和PostSwap()。

  关于场景图

  一般结构

  GameEngine2D的场景图以层级关系保存游戏世界的节点,并在渲染时遍历。它不被用来做其他任何事。例如调用Update()时不会遍历(这个在Scheduler中处理)。每个场景图的根节点都是一个Scene节点。Scene导航通过一个场景栈经由Director.Instance单例来处理(类似Cocos2D)。此外,在GameEngine2D中,Director也保存了大部分GameEngine2D库的其他全局对象。Node对象含有一列子节点(通过Children属性来访问),并且之多含有一个父节点(通过Parent属性来访问)。使用AddChild()、RemoveChild()和RemoveAllChildren()来修改Parent和Children。

  节点更新

  每个节点都和“actions”相关联。行为通过ActionManager.Instance进行管理,但是主要通过Node的成员函数来操作。每个节点可以有一些调度函数,例如像它们关联的主Update函数。调度函数通过Scheduler.Instance进行管理,但是主要通过Node的成员函数来操作。ActionManager和Scheduler和Coscos2D里的类似。

  节点位置属性

  Node对象有一个包含Position/Rotation/Scale/Skew组件组成的2D变换,Pivot被用来作为变换中 Rotation/Scale/Skew的中心点。这里“局部”变换(相对于Parent节点来说的)可以通过调用GetTransform()来得到。在代码方面,节点变换矩阵等价于:

  设置上面的任何属性都会使节点和它的子树移动,或旋转,或缩放,或倾斜。

  节点对象层次结构

  这是场景图节点的类型层次。灰色的节点是中间类型,你从不会直接实例化它们。

  如何使子画面移动

  SpriteUV和SpriteTile可以让你从Node中操作个别的子画面对象。除了节点的变换属性(子画面节点的功能),SpriteUV和SpriteTile还有Quad属性来确定它们的几何形状。Quad属性是一个TRS对象(变换(T),旋转(R),缩放(S)),它可以被看作是子画面的第二个局部变换(变换单位四元组使其成为一个有方向,缩放的子画面矩形)。但是为了清楚起见,我们将它定义为四元组的 “几何形状”。

  使用Scheduler来移动节点

  大部分时间你将在调度函数中移动Node对象。一个简单快速的方法是使用Node.Schedule,在Scheduler中给节点注册一个lambda函数,每帧调用这个注册的函数:

  另一个方法是每帧调用Sprite类中的节点函数,覆盖Update()函数,并通过Node.ScheduleUpdate()来调用它。

  使用Action来移动节点

  节点属性的行为可以用来移动节点。下面的代码将演示在0.1秒内将子画面移动到(10,5)的位置。

  通过设置那些特别行为的Tween属性,你可以改变插值曲线。

  一些其他的行为会影响位置属性,一些类似于Cocos2D(MoveTo,MoveBy,ScaleTo,ScaleBy等)和一些更通用的,比如 ActionTweenGenericVector2,ActionTweenGenericVector4,ActionTweenGenericVector2Scale,ActionTweenGenericVector2Rotation。

  关于子画面几何形状:TRS

  子画面的Quad属性(一个TRS对象)允许你通过设定大小、位置和方向在节点的局部空间内(记住子画面的基本变换属性依然有效)指定子画面的几何形状。T属性(T代表变换)是指以矩形左下角点的坐标。S属性(S代表缩放)是指矩形的大小。R属性(R代表旋转)代表了矩形的方向(你能看到它是矩形的局部X轴)。注意一个TRS的旋转代表一个单位向量,而不是代表角度这个标量-虽然也有接口以角度来设置和获取R属性。TRS不会将R属性标准化,所以你需要保证其标准化。通过设置RotationNormalize来替代R属性将会使R属性标准化。R被设定为(1,0),即X轴不旋转。

  这里有一些演示T,R,S值的意义的例子。在那些图片上,世界的X和Y轴用黑粗线表示。在上下文子画面内,你也可以看到那些线作为节点局部坐标系(也就是通过GetTransform()获得的空间)。最简单的TRS可能是单位四元组(或单位变换),被称作TRS.Quad0_1:

  另一个例子,这次带有一个旋转:

  子画面和场景图变换

  唯一的变换信息是通过遍历图调用Node.GetTransform()来获得的。子画面对象的Quad属性不会影响子节点的位置:它只会影响子画面自己的几何形状(矩形)。

  在SpriteUV、SpriteTile、SpriteList和RawSpriteTile中选择

  使用哪种子画面类型

  SpriteUV产生一个子画面节点,你可以手动设置顶点的UV。SpriteTile很可能更有用,因为2D游戏通常按规整的网格打包子画面图像数据,例如做一些子画面帧动画。

  性能

  但是SpriteUV和SpriteTile绘制它们的子画面都很“独立”,这意味着它们有较高的设置开销和昂贵的对象。

 << 上一页  [9] [10] [11] [12] [13] [14] [15] [16] 下一页

提示:支持键盘“← →”键翻页 阅读全文

相关推荐

评论