【v2.x OGE课程 15】 布局相关
1.父亲和儿子的关系
我们可以Entity类看到非常多parent(父)与child(子)这种字眼,这是游戏引擎中常有的概念,简单而言是一种has-a的关系
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvT3JhbmdlR2FtZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
相应代码:
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=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)/期望分辨率高
,那么空出来那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" alt="">
相应源代码
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;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
【v2.x OGE课程 15】 布局相关的更多相关文章
- 【v2.x OGE课程 14】 控制使用
在这里,精灵.动画精灵.button天才.经常使用的文本的使用 一个.相关精灵 1.加入精灵 //创建精灵 Sprite bar_up = new Sprite(400, 0, RegionRes.g ...
- Linux课程---15、域名相关
Linux课程---15.域名相关 一.总结 一句话总结: 先购买域名,再备案,再解析,域名即可使用 1.域名备案是怎么回事(比如二级域名,三级域名)? 每个二级域名需要备案一次,三级域名不需要备案, ...
- amazeui学习笔记--css(布局相关3)--辅助类Utility
amazeui学习笔记--css(布局相关3)--辅助类Utility 一.总结 1.元素清除浮动: 添加 am-cf 这个 class 即可 2.水平滚动: .am-scrollable-horiz ...
- display属性的表格布局相关属性
基于CSS属性display:table的表格布局的使用 项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的tabl ...
- laravel基础课程---15、分页及验证码(lavarel分页效果如何实现)
laravel基础课程---15.分页及验证码(lavarel分页效果如何实现) 一.总结 一句话总结: 数据库的paginate方法:$data=\DB::table("user" ...
- js课程 1-5 js如何测试变量的数据类型
js课程 1-5 js如何测试变量的数据类型 一.总结 一句话总结:用typeof()方法. 1.js如何判断变量的数据类型? 用typeof()方法. 13 v=10; 14 15 if(typeo ...
- Spider Studio 新版本 (20140225) - 设置菜单调整 / 提供JQueryContext布局相关的方法
这是年后的第一个新版本, 包含如下: 1. 先前去掉的浏览器设置功能又回来了! 说来惭愧, 去掉了这两个功能之后发现浏览经常会被JS错误打断, 很不方便, 于是乎又把它们给找回来了. :) 2. 为J ...
- mysql数据库优化课程---15、mysql优化步骤
mysql数据库优化课程---15.mysql优化步骤 一.总结 一句话总结:索引优化最立竿见影 1.mysql中最常用最立竿见影的优化是什么? 索引优化 索引优化,不然有多少行要扫描多少次,1亿行大 ...
- amazeui学习笔记--css(布局相关1)--网格Grid
amazeui学习笔记--css(布局相关1)--网格Grid 一.总结 基本使用 1.div+class布局:amaze里面采取的就是div+class的布局方式 <div class=&q ...
随机推荐
- tc
[em_Compare]cmd=d:\Apps\BeyondCompare4\now\BCompare.exeparam="""%X%P%S"" &q ...
- SpringBoot 使用 @Value 从 YAML文件读取属性(转)
在 YAML中有如下配置 paypal: mode:live 在类中,通过 @Value属性读取 @Value("${paypal.mode}") private String m ...
- 安装Centos时“sda必须有一个GPT磁盘标签”
http://jingyan.baidu.com/article/c45ad29c272326051753e2d1.html
- java的对象锁和对象传递
1.对象传递 在JAVA的參数传递中,有两种类型,第一种是基本类型传递,比如int,float,double等,这样的是值传递,第二种是对象传递,比方String或者自己定义的类,这样的是引用传递. ...
- html5 在移动端的缩放控制
viewport 语法介绍: 01 <!-- html document --> 02 <meta name="viewport" 03 content= ...
- 【40.17%】【codeforces 569B】Inventory
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- linux中竖线'|',双竖线‘||’,&和&&的意思
对于初学者来说这几个意思可能只知道其中几个的意思,下面我们来看一下. 1.竖线'|' ,在linux中是作为管道符的,将'|'前面命令的输出作为'|'后面的输入.举个例子 [18066609@root ...
- 如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码)
如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码) 一.总结 1.动画效果可能是 CSS 实现的,也可能是 JS 实现的. 2.直接Chrome的F12调试即可, ...
- 诊断并解决CentOS SSH连接慢的方法
诊断并解决CentOS SSH连接慢的方法: http://os.51cto.com/art/201507/484743.htm
- php如何利用标准输入输出实现在一个字符串中计算某个字符出现的个数?
php如何利用标准输入输出实现在一个字符串中计算某个字符出现的个数? 一.总结 php实现计算字符个数(php标准输入和输出:fgets(STDIN) echo $output;) 1.php标准输 ...