【v2.x OGE课程 15】 布局相关

1.父亲和儿子的关系

我们可以Entity类看到非常多parent(父)与child(子)这种字眼,这是游戏引擎中常有的概念,简单而言是一种has-a的关系

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvT3JhbmdlR2FtZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

相应代码:

B.attachChild(A);

B.attachChild(C);

C.attachChild(D);

从代码和图片能够看出

B没有父

B的子是A、C

A和C的父都是B

C的子是D

D的父是C

2.实体的相对布局

在Entity方法中。Entity经常使用相对布局来实现界面效果,并且能够利用相对布局达到适配的效果。

private void initRectangle() {

// white_rect对象在当前Scene中居中摆放

Rectangle white_rect=new Rectangle(0,0,100,100,

this.getVertexBufferObjectManager());

white_rect.setCentrePosition(TestScene.this.getCameraWidth() /2,

TestScene.this.getCameraHeight() /2);

// 将white_rect对象加入至场景TestScene

TestScene.this.attachChild(white_rect);

// green_rect默认坐标 0,0 宽、高为50的矩形

green_rect=new Rectangle(0,0,50,50,this.getVertexBufferObjectManager());

// white_rect的顶部Y值将设置在white_rect的底部

green_rect.setTopPositionY(white_rect.getBottomY());

// green_rect的中心X与white_rect的中心X一致

green_rect.setCentrePositionX(white_rect.getCentreX());

green_rect.setColor(Color.GREEN);

// 将green_rect对象加入至场景TestScene

TestScene.this.attachChild(green_rect);

}

3.Layer

图层的基类是Entity,图层是逐个叠加的。类似于制作卡通动画时所用的赛璐珞。图层用来对场景中的Sprite等实体进行管理控制。以便在同一场景使用不同的图层达到表现效果。

如天天酷跑,有了图层,我们能够将RPG游戏中的button,状态放在一个场景中,游戏内容能够放到还有一个图层中,这样就不会相互干扰了。

4.ZIndex的使用

有时候由于需求。须要将原本在底部的Entity置顶,那么就须要用到ZIndex这个參数,两者对照,ZIndex较大的Entity在上面,所以设置好ZIndex的值后,用sortChildren对其又一次排序。

5.IEntityGroup

仅仅有实现这个接口的类才干够进行这种操作,这种嵌套方式能够让开发自行定义游戏层级结构

LayerA.attachChild(layerB);

LayerB.attachChild(layerC);

6.适配原理(多分辨率支持策略和原理)

游戏设计分辨率:

我们自定义游戏的分辨率是多少(比如800×480),然后UI依据这个分辨率来进行画图

手机屏幕分辨率:手机自身屏幕的分辨率

期望分辨率=游戏设计分辨率

实际分辨率=手机屏幕分辨率

首先确定是横屏游戏还是竖屏游戏,如果手机是320×480,是竖屏游戏,而且游戏设计分辨率是480×800

举例:以保持宽不变,高适配。

如果UI给的图是480×800

屏幕宽高比=实际分辨率宽(320)/实际分辨率高(480)=期望分辨率宽(480)/期望分辨率高

我们能够得到期望分辨率高等于720。由于UI 给图的高是800,那么空出来那80=800-720部分就是图中没有阴影的那一部分。

在手机显示效果图

1. @Override

2. protectedPixelPerfectEngineOptions onCreatePixelPerfectEngineOptions() {

3.     PixelPerfectEngineOptionspixelPerfectEngineOptions = new PixelPerfectEngineOptions(this,ZoomCamera.class);

4.     pixelPerfectEngineOptions.setDesiredSize(480);

5.     pixelPerfectEngineOptions.setScreenOrientation(ScreenOrientation.PORTRAIT_FIXED);

6.     pixelPerfectEngineOptions.setPixelPerfectMode(PixelPerfectMode.CHANGE_HEIGHT);

7.     returnpixelPerfectEngineOptions;

8. }

复制代码

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvT3JhbmdlR2FtZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

相应源代码

public EngineOptions createEngineOptions() {

float[] screenSize = this.getScreenSize();

float screenWidth = screenSize[0];

float screenHeight = screenSize[1];

float screenRatio = screenWidth / screenHeight;

float cameraWidth = this.mDesiredSize;

float cameraHeight = this.mDesiredSize;

if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_WIDTH) {

cameraWidth = this.mDesiredSize * screenRatio;

} else if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_HEIGHT) {

cameraHeight = this.mDesiredSize / screenRatio;

}

Class<?

>[] parameterTypes = { float.class, float.class, float.class,float.class };

Object[] argParam = { 0.0f, 0.0f, cameraWidth, cameraHeight };

Camera camera = ReflectionUtils.newInstance(this.mCameraCls, parameterTypes, argParam);

EngineOptions engineOptions = new EngineOptions(true, this.mScreenOrientation, new FillResolutionPolicy(), camera);

engineOptions.getTouchOptions().setNeedsMultiTouch(true);

engineOptions.getAudioOptions().setNeedsSound(true);

engineOptions.getAudioOptions().setNeedsMusic(true);

engineOptions.getRenderOptions().setDithering(true);

return engineOptions;

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-26 08:00:24

【v2.x OGE课程 15】 布局相关的相关文章

【v2.x OGE教程 15】 布局相关

1.父与子关系 我们可以在Entity类看到很多parent(父)与child(子)这样的字眼,这是游戏引擎中常有的概念,简单而言是一种has-a的关系 对应代码: B.attachChild(A); B.attachChild(C); C.attachChild(D); 从代码和图片可以看出 B没有父 B的子是A.C A和C的父都是B C的子是D D的父是C 2.实体的相对布局 在Entity方法中,Entity常用相对布局来实现界面效果,而且可以利用相对布局达到适配的效果. private 

【v2.x OGE课程 14】 控制使用

在这里,精灵.动画精灵.button天才.经常使用的文本的使用 一个.相关精灵 1.加入精灵 //创建精灵 Sprite bar_up = new Sprite(400, 0, RegionRes.getRegion(Res.BAR_UP),    getVertexBufferObjectManager()); //将精灵加入至BaseEntityGroup或其子类(如:Scene.Layer等) BaseEntityGroup.attachChild(bar_up); 2.精灵翻转 //两者

【v2.x OGE教程 12】 关卡编辑器帮助文档

[v2.x OGE教程 12] 关卡编辑器帮助文档 一.简介 关卡编辑器用于游戏关卡界面元素的可视化编辑,包括元素的位置.尺寸以及其它自定义属性.通过解析生成的数据文件即可获取关卡信息,并能随时调整,以减少开发工作量,提高开发效率. 二.界面 主界面 图01_主界面 1) 画布 ① 简介 画布用于关卡元素的预览,并提供元素选择和坐标设置等功能:画布的尺寸与其正在显示的关卡的尺寸相同 图02_画布 ② 选择元素 a. 单选:鼠标左键单击即可选中单个元素,选中后的元素周围出现蓝色的方框,未选中的则为

【v2.x OGE教程 11】 动画编辑器帮助文档

[v2.x OGE教程 11] 动画编辑器帮助文档 版本号 日期 作者 说明 1.0 2014-9-3 橙子游戏 文档创建       一.简单介绍 动画编辑器用于游戏动画的可视化编辑,支持序列帧动画和关键帧动画.通过解析生成的数据文件就可以获取动画信息,并能随时调整,以降低开发工作量.提高开发效率. 二.相关概念 1. 帧 帧是动画在某个时间点的状态.一系列的帧组成了动画的时间线.动画播放时.通过帧的切换,实现动画效果 2. 序列帧 序列帧组成序列帧动画,这样的动画中.仅通过静态图片的切换来实

前端笔记十一,盒模型与布局相关属性

布局相关属性  float:控制目标组件是否浮动以及如何浮动,设置浮动后,该组件被当做块组件处理,即相当于display属性为block:可选的属性值 left:指定对象向左浮动 right:指定对象向右浮动 clear:设置组件的左.右是否哪边不允许出现浮动对象.可选属性值: none:默认值,两边都允许出现浮动组件 left:不允许左边出现浮动组件 right:不允许右边出现浮动组件 both:两边都不允许出现浮动组件 clip:控制对元素进行裁剪 auto:不裁剪 rect(a,b,c,d

【v2.x OGE教程 13】 Scene场景使用

[v2.x OGE教程 13] Scene场景使用 一.场景介绍 OGE开源引擎中,场景(Scene)是用于展示游戏画面的,装载各种精灵.按钮.文字等,例如开始场景需要装载一个游戏标题.开始游戏按钮.背景等 二.Scene场景创建 创建一个类,让其继承Scene类或者Scene的子类,ISceneLauncher的接口定义了一系列对Scene的使用规范 三.Scene场景跳转 ISceneLauncher的是实现类(例如Scene或GameLauncher)可以对场景进行跳转 实现代码:publ

盒模型与布局相关属性

1.布局相关属性 所有与布局相关的属性如下: float:该属性控制组件是否符合浮动:以及如何实现浮动,该属性可以设置为left,right.来控制向 哪里浮动:(通过float可以实现多栏布局) clear:该属性与float相反,该属性可以设置为none,left,right,both.(通过clear可以实现换 行) none:两边都允许出现浮动组件: left:不允许左边出现浮动组件: right:不允许右边出现浮动组件: both:两边均布允许出现浮动组件: clip:该属性用于对元素

盒模型布局相关-基础与语法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "Yuanti SC"; color: #000000; background-color: #ffffff } span.s1 { } 布局相关属性 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "Yuanti SC"

【v2.x OGE教程 18】 Entity相关

让游戏设计变灵活的方法之一,就是使用实体/组件式设计方法,该方法将所有物体都看作Entity对象,而不是为每种物体设计一个类.在屏幕中所绘制的所有东西都是实体(场景.层.文字.几何图形.线条.精灵等).这些实体对象稍后会被动态地设置属性(或组件),使之对应的做出改变. 1.更新相关 Engine以逻辑线程及GL线程以数据同步的方式对游戏进程进行更新,Entity更新其中onUpdate和onDraw方法,onUpdate方法中IgnoreUpdate就是判断是否更新逻辑(包括属性参数,如坐标等)