OGEngine之多分辨率支持策略和原理

对于AndEngine的屏幕适配,通常使用RatioResolutionPolicy来拉伸屏幕,但是当游戏分辨率与手机分辨率的宽高比例不一致的时候,就不可避免的出现部分的黑色区域,影响游戏体验,目前OGengine开源引擎已经解决了该问题,可以达到满屏自适应屏幕

游戏设计分辨率:

我们自己定义游戏的分辨率是多少(例如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=
  4. new PixelPerfectEngineOptions(this,ZoomCamera.class);
  5. pixelPerfectEngineOptions.setDesiredSize(800);
  6. pixelPerfectEngineOptions
  7. .setScreenOrientation(ScreenOrientation.LANDSCAPE_FIXED);
  8. pixelPerfectEngineOptions
  9. .setPixelPerfectMode(PixelPerfectMode.CHANGE_HEIGHT);
  10. returnpixelPerfectEngineOptions;
  11. }

复制代码

  1. public EngineOptions createEngineOptions() {
  2. float[] screenSize = this.getScreenSize();
  3. float screenWidth = screenSize[0];
  4. float screenHeight = screenSize[1];
  5. float screenRatio = screenWidth / screenHeight;
  6. float cameraWidth = this.mDesiredSize;
  7. float cameraHeight = this.mDesiredSize;
  8. if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_WIDTH) {
  9. cameraWidth = this.mDesiredSize * screenRatio;
  10. } else if (this.mPixelPerfectMode == PixelPerfectMode.CHANGE_HEIGHT) {
  11. cameraHeight = this.mDesiredSize / screenRatio;
  12. }
  13. Class<?>[] parameterTypes = { float.class, float.class, float.class,float.class };
  14. Object[] argParam = { 0.0f, 0.0f, cameraWidth, cameraHeight };
  15. Camera camera = ReflectionUtils.newInstance(this.mCameraCls,
  16. parameterTypes, argParam);
  17. EngineOptions engineOptions = new EngineOptions(true,
  18. this.mScreenOrientation, new FillResolutionPolicy(), camera);
  19. engineOptions.getTouchOptions().setNeedsMultiTouch(true);
  20. engineOptions.getAudioOptions().setNeedsSound(true);
  21. engineOptions.getAudioOptions().setNeedsMusic(true);
  22. engineOptions.getRenderOptions().setDithering(true);
  23. return engineOptions;
  24. }

复制代码

OGEngine之多分辨率支持策略和原理

时间: 2024-08-05 15:20:49

OGEngine之多分辨率支持策略和原理的相关文章

cocos进阶教程(2)多分辨率支持策略和原理

cocos2d-x3.0API常用接口 Director::getInstance()->getOpenGLView()->setDesignResolutionSize() //设计分辨率大小及模式 Director::getInstance()->setContentScaleFactor() //内容缩放因子 FileUtils::getInstance()->setSearchPaths() //资源搜索路径 Director::getInstance()->getO

nginx(4)-负载均衡的5种策略及原理

nginx的upstream目前支持的5种方式的分配 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2.指定权重指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. upstream backserver { server 192.168.0.14 weight=8; server 192

Atitit 游戏的原理与概论attilax总结

1. 游戏历史2 1.1.1. 盘点PC游戏史上最重要的50款游戏2 1.1.2. 回味人类文明进程 五款经典的历史游戏2 2. 游戏类型(主要分为6类:动作.冒险.模拟.角色扮演.休闲和其他)2 3. <游戏设计的100个原理>((美)迪斯潘...)2 4. <游戏>((美)加维...)[3 5. 游戏开发工程师修炼之道3 6. 基础概念 (导演,场景,层,以及精灵,调度器scheduler)3 7. 人机交互(事件分发机制 Event Dispatcher4 8. 主要功能(流

【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.at

【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 

《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

<Cocos2d-x实战 C++卷>上线了 感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节. · 各大商店均开始销售: 京东:http://item.jd.com/11584534.html 亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU 当当:ht

Hibernate主键生成策略总结(转)

Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通过举例子来了解实体映射文件(*.hbm.xml)中对id生成策略配置格式 用户User的实体类User.java [java] view plaincopy package com.bjpowernode.hibernate; import java.util.Date; public class 

(七)策略模式详解

上章我们着重讲解了观察者模式和事件驱动,那么本章来讨论一个个人认为在开发过程中出场率极高的设计模式,策略模式. 策略模式在LZ第一次接触到的时候,LZ是这么理解的,就是如果我们想往一个方法当中插入随便一段代码的话,就是策略模式.即如下形式. [java] view plaincopy <EMBED id=ZeroClipboardMovie_1 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pl

(16)Cocos2d-x 多分辨率适配完全解析

Overview 从Cocos2d-x 2.0.4开始,Cocos2d-x提出了自己的多分辨率支持方案,废弃了之前的retina相关设置接口,提出了design resolution概念. 3.0中有以下相关接口: Director::getInstance()->getOpenGLView()->setDesignResolutionSize() //设计分辨率大小及模式 Director::getInstance()->setContentScaleFactor() //内容缩放因子