Leo*_*rak 12 android 2d game-development
我没有2D图形和游戏体验.我教了几百个错误和几十个小时.我从简单的装扮游戏开始.我使用Nexus 5x进行开发,屏幕看起来不错.当我完成一个里程碑时,我在大联想平板电脑和小巧的三星迷你手机上试玩游戏.它看起来很可怕.
原始矢量PSD文件看起来很完美,PNG导出也没有任何问题.但是,当我缩放图片时,它是颠簸的.我知道它是位图.但是还有另一张我在其他地方缩放的图片,它看起来很好(两张图片都是32位):
当我从Google Play玩一些游戏时,他们从未遇到过扩展问题.他们是如何实施的?他们使用载体吗?有一些技巧吗?
我把所有东西放到assets文件夹中,虽然花了1 MB.我反编译了一些apk,他们没有为每个分辨率设置变种.虽然他们很好地缩放图片.
一些源代码片段:
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
this.w = w;
this.h = h;
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
drawCanvas = new Canvas(canvasBitmap);
}
protected void onDraw(Canvas canvas) {
if (baseBitmap != null) {
double scale = Math.min((double) w / (double) figure.getW(), (double) h / (double) figure.getH());
figure.setScaleRatio(scale);
int sw = (int) (scale * figure.getW());
int x = ((w - sw) >> 1);
figure.setX(x);
paintDressPart(canvas, figure, figure.getMain());
if (displayedParts != null) {
for (DressPart dressPart : figure.getParts()) {
if (displayedParts.contains(dressPart.getId())) {
paintDressPart(canvas, figure, dressPart);
}
}
}
}
}
private void paintDressPart(Canvas canvas, Figure figure, DressPart part) {
double scale = figure.getScaleRatio();
int sh = (int) (scale * part.getH());
int sw = (int) (scale * part.getW());
int sdx = (int) (scale * part.getDestX());
int sdy = (int) (scale * part.getDestY());
scaledRect.set(figure.getX() + sdx, sdy, figure.getX() + sw + sdx, sh + sdy);
Rect partRect = part.getRect();
canvas.drawBitmap(baseBitmap, partRect, scaledRect, canvasPaint);
}
Run Code Online (Sandbox Code Playgroud)
如果您想亲眼看到它,我会在GitHub上准备完整的项目,以便您可以下载并自行运行:
https://github.com/literakl/DressUp
更新
缩小规模也很糟糕.但是由于Paavnet的评论,我意识到Paint非常重要.看图片上的差异:
我在3,2"AVD图像上运行了演示应用程序.图片278x786缩放到107x303.
十月更新
我重写了应用程序以使用资源文件夹而不是资产.Android缩放图片,然后我再次重新缩放.虽然它看起来比我不使用Android资源扩展时更好.资源缩放图片看起来通常比未缩放的nodpi/assets图片好.
我发现mdpi效果最好.我甚至有xxhdpi图片,它看起来比mdpi更糟糕.我认为即使在xxhdpi设备上!但它可能是图片的一个麻烦,它没有很好地绘制.Android资源缩放可以平滑线条上的边缘.
我遇到了同样的问题..缩放不是那么顺利..最佳标准方法
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);
Run Code Online (Sandbox Code Playgroud)
您可以在网络中找到更优化的尺寸转换器..但实际上我最终使用了最佳解决方案:
第一。使用 Vector SVG 资源..这是 100% 完美质量的工作。只需确保 SVG 元素与 android 兼容(请参阅:https ://developer.android.com/studio/write/vector-asset-studio.html )
优点:
缺点:
或者
第二。提供高分辨率图像(xxxhdpi 一张就足够了)
优点:
缺点:
我希望这会有所帮助,”。