Andengine,缩放图像以填充屏幕大小,而不保持纵横比
Posted
技术标签:
【中文标题】Andengine,缩放图像以填充屏幕大小,而不保持纵横比【英文标题】:Andengine, scaling an image to fill screen size, without mantaining aspect ratio 【发布时间】:2012-10-17 01:25:57 【问题描述】:我正在尝试设置大小为 960x640 像素的图像...我的设备有 854x480 像素..
我所做的是加载精灵,然后设置为场景背景...
sprite = new Sprite(0, 0, fieldITexture, BaseActivity.getSharedInstance().getVertexBufferObjectManager());
setBackground(new SpriteBackground(sprite));
但显然该图像超出了屏幕,我尝试使用 setScale 和 setScaleCenter,但我没有给出任何结果...请参阅此图像:http://db.tt/pcuJa4vE
要设置相机尺寸,我已经根据设备进行了设置:
final Display display = getWindowManager().getDefaultDisplay();
CAMERA_WIDTH = display.getWidth();
CAMERA_HEIGHT = display.getHeight();
mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
那么,如何将足球场缩放到屏幕尺寸?我不在乎方面
【问题讨论】:
为什么要使用 display.getWidth()?您可以使用内置扩展机制e 我认为您可以使用其他 Sprite 的构造函数并将精灵的宽度和高度指定为您的相机尺寸,而不是使用纹理区域的宽度/高度。 【参考方案1】:不要使用 device.getWitdh() 和 device.getHeight() 使用固定的宽度和高度
public final static int CAMERA_WIDTH = 720;
public final static int CAMERA_HEIGHT = 480;
AndEngine 会为您缩放所有图像,有时您会因为缩放而在屏幕边缘看到一个小黑条。但几乎不引人注目。
@Override
public EngineOptions onCreateEngineOptions()
camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), camera);
return engineOptions;
【讨论】:
是的,我在andengine论坛上读到过,但问题是我不想有那些黑条...,我该怎么办????谢谢 这不是建议的工作方式,但您可以通过以下方案实现它:使用上述固定高度和 witdh -> 这将是您的起点。计算起点和设备配置之间的比率差异 (device.getWidth())。使用此比例缩放整个场景或场景中的每个图像【参考方案2】:只是把它放在那里,我相信这些设备有 2 个主要比例(5:3 和 4:3)。 大多数其他人比 4:3 更接近 5:3(所以 5:3 应该是默认值)。
我想尽可能支持最好的图形,而不必考虑所有的屏幕尺寸。 所以我采用了这两个比率。
现在我的设置是这样的:
定义
String fileFolderForRatio = "";
int CAMERA_WIDTH = 1280;
int CAMERA_HEIGHT = 768;
@Override
public EngineOptions onCreateEngineOptions()
instance = this;
// getting the device's screen size
Point screenSize = getScreenSizeByRatio();
CAMERA_WIDTH = screenSize.x;
CAMERA_HEIGHT = screenSize.y;
mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
final EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
engineOptions.getAudioOptions().setNeedsSound(true);
engineOptions.getAudioOptions().setNeedsMusic(true);
return engineOptions;
和函数(注意检查宽度和高度,有时 AndEngine 会反过来检测)
public Point getScreenSizeByRatio()
final Display display = getWindowManager().getDefaultDisplay();
double sw = display.getWidth();
double sh = display.getHeight();
double ratio = sw / sh;
if (sw < sh) ratio = sh/sw;
Point screenPoints = new Point();
if (ratio > 1.3 && ratio < 1.4)
fileFolderForRatio = "1024x768";
screenPoints.x = 1024;
screenPoints.y = 768;
else
fileFolderForRatio = "1280x768";
screenPoints.x = 1280;
screenPoints.y = 768;
Debug.e("RATIO", fileFolderForRatio);
return screenPoints;
将图形(针对该屏幕尺寸进行了优化)放入 1024x768 文件夹和 1280x768 文件夹中。
这样你就有了半静态的屏幕尺寸。 AndEngine 将为您调整其余部分的大小。
(请不要对精灵的屏幕定位进行检查,因为这对于 2 个比率是不一样的。 但是来自 ios 开发者并没有那么困难(iPad 和 iPhone)
希望对你有帮助
【讨论】:
这实际上适用于我的 Galaxy Nexus,但我得说我不太了解! 很高兴它有帮助。它或多或少定义了 2 个标准并获取该标准最接近的比率。根据该比率,它从正确的文件夹中选择文件。【参考方案3】:替换: 新的 RatioResolutionPolicy(宽度,高度) 和: 新的 FillResolutionPolicy ()
这会填满整个屏幕。
【讨论】:
以上是关于Andengine,缩放图像以填充屏幕大小,而不保持纵横比的主要内容,如果未能解决你的问题,请参考以下文章
IOS - 将背景图像缩放到不同的屏幕尺寸并将标签放在固定位置上