文档章节

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

橙游OrangeGame
 橙游OrangeGame
发布于 2014/10/24 15:47
字数 973
阅读 31
收藏 0

布局相关



1.父与子关系

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

对应代码:

B.attachChild(A);

B.attachChild(C);

C.attachChild(D);

从代码和图片可以看出

B没有父

B的子是AC

AC的父都是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的中心Xwhite_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游戏中的按钮,状态放在一个场景中,游戏内容可以放到另一个图层中,这样就不会相互干扰了。


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. }

复制代码

 

对应源码

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;

}

 

 

 

 

© 著作权归作者所有

橙游OrangeGame

橙游OrangeGame

粉丝 9
博文 43
码字总数 42742
作品 1
深圳
部门经理
私信 提问
【v2.x OGE教程 14】控件使用

下面介绍精灵、动画精灵、按钮精灵、文本的常用使用方法 一、精灵相关 1.添加精灵 //创建精灵 Sprite bar_up = new Sprite(400, 0, RegionRes.getRegion(Res.BAR_UP), getVertexBufferObjec...

橙游OrangeGame
2014/10/22
2
0
php开源框架--CmlPHP

简介 CmlPHP从12年开始开发。从最早追求尽可能轻量,php5.2-的语法。到后面不断总结工作中碰到的实际的问题,加入工程化的一些东西。加入Composer的支持。加入了很多可以减少程序员开发时间的...

雨空
2013/09/11
6.5K
4
HTML5开发手机App之:CSS全教程-何韬-专题视频课程

HTML5开发手机App之:CSS全教程—20784人已学习 课程介绍 全面解读CSS2,CSS3以及CSS布局模式等各项知识点,深入系统了解CSS能够实现的各种功能并加以灵活运用。 课程收益 使致力于开发Web前...

pkutao
2016/03/31
0
0
ToughRADIUS V2.0.2 发布, 开源认证计费系统。

ToughRADIUS 致力于服务中小微运营商,让宽带运营变的更简单、高效、可靠。 ToughRADIUS V2.0.2 发布。 ToughRADIUS V2.x版本并不是 V1.x版本的简单延续,而是一次完全重构,一次打破兼容性的...

jamiesun
2016/02/19
2.3K
2
Ionic2开发环境搭建-VS 2017

原文:Ionic2开发环境搭建-VS 2017 目前在VS 2017中创建Ionic2版本项目 注:在VS中开发Ionic项目,使用的Ionic(v2.x),Cordova(v6.3.1),Angular(v2.x)的版本都比较低。 1.前提,安装VS时,选...

杰克.陈
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot初探---spring-boot-starter-web究竟干了啥

上一篇已经简单介绍了启动类的部分,这一篇主要讨论一下springboot引入的哪些依赖 我们都知道想用springboot做一个web应用,首先要做的是引入相关依赖,两步操作: 1、添加spring-boot-start...

计算机狼
34分钟前
5
0
基于Rocket.chat搭建内网聊天系统(使用docker,本机不需要安装meteor)

您可能不希望使用标准的Docker命令,而是希望对部署进行更多的自动化管理。这就是使用Docker-compose可能会派上用场的地方。 确保您已安装Docker和Docker-compose并且可以正常运行。 docker...

吴伟祥
36分钟前
6
0
conda 更新源

更新conda 源为阿里源 conda config --add channels http://mirrors.aliyun.com/pypi/simple conda config --set show_channel_urls yes 阿里云: http://mirrors.aliyun.com/pypi/simple/ 豆......

Mr_Tea伯奕
36分钟前
4
0
java 泛型使用

每次写泛型方法都翻下百度,还是自己记录下把。 1、定义一个泛型方法,使用传入参数类型来传递泛型。这种用法在封装json序列化工具类应该会用到。 List<xxx> aa = getList(xxx.class);pr...

朝如青丝暮成雪
40分钟前
6
0
深入了解Java模板引擎Freemarker

前言 常用的Java模板引擎包括:JSP、Freemarker、Thymeleaf、Velocity,从Github上查阅到这几款主流的模板引擎的性能的对比,总体上看,JSP、Freemarker、Thymeleaf、Velocity在性能上差别不...

code-ortaerc
41分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部