【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 ...
随机推荐
- DIKW模型与数据工程(了解)
DIKW 体系 DIKW体系是关于数据.信息.知识及智慧的体系,可以追溯至托马斯·斯特尔那斯·艾略特所写的诗--<岩石>.在首段,他写道:"我们在哪里丢失了知识中的智慧?又在哪里 ...
- iOS开发:枚举的介绍与使用
#import "ViewController.h" //第一种写法 typedef enum { XMGDemoTypeTop, XMGDemoTypeBottom, }XMGD ...
- php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了)
php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了) 一.总结 日常出错很容易是分号或者$符号忘记写了 二.php实现求最小的k个数 题目描述 输入n个整数,找出其中最小的K个数.例如输 ...
- 远程登录DSM,显示“您没有权限使用本项服务?
远程登录DSM,显示“您没有权限使用本项服务?” https://www.chiphell.com/thread-825297-1-1.html 有可能你单位用的是多wan接入.一般synology不 ...
- Android 让文本输入框默认不获取焦点
项目中有个检索功能,页面上有个EditText输入框,打开页面后,焦点默认在EditText上,这样的话软键盘默认就会显示出来,占据大半个屏幕. 后来想办法将这个给去掉了,原先考虑着将焦点赋给页面上的 ...
- IT增值服务-客户案例(三):合肥薪火科技,Java和P2P网络借贷系统开发指导
客户整体情况: 合肥薪火科技,是安徽合肥一家主营微信开发和运营的中小企业,http://weimarket.cn/. 这家公司筹备.创立.曲折创业的经历,我一直有关注.因为2个老板,都是我的同学校友, ...
- 算法 Tricks(五)—— 二进制逻辑运算
int flag = 1; while ( (data & flag) == 0 ) flag <<= 1; 判断某数的二进制形式的某位(第 k 位)是否为 1,将其与 2k 相与 ...
- 【codeforces 604D】Moodular Arithmetic
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- javaScript判断输入框是否为空
其中获得和失去焦点的时候都判断了一次 <script> function fun01(f,s){//有参函数 参数不需要参数类型!! try{ var v = document.getEl ...
- fastjson空对象不显示问题
今天在网上找了半天,看到一个大神自己搭建的网站,贴出了这个问题的解决办法,大家共享一下,对那些牛X的大神膜拜吧. 例子: Map < String , Object > jsonMap = ...