Articles of 2d

在Android上扩展问题 – 为什么图片如此笨拙?

我没有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 […]

glOrthof和glViewPort之间的区别

在OpenGL-ES上,我对设置之间的区别感到困惑 glOrthof() glViewPort() GLU.gluOrtho2D() 用它的各自参数。 因为我相信所有设置的部分你可以看到指定的坐标(宽度,高度)。 我应该使用哪个?

用于安卓游戏的精灵和animation制作工具

我是Android游戏开发的新手。 我想知道如何创建和animation我想到的游戏角色。 有没有可以帮助我开始绘图的工具,或者我必须逐帧绘制。 我的目标是简单的2D游戏。

在Android Canvas上包装长文本

我有一个自定义控件,可以直接在canvas进行大量2D绘图。 这个绘图的一些是文本,所以我使用Canvas.drawText()方法。 我想在一些边界内绘制文本 – 左上角,某个最大宽度和最大行数。 在绘制文本后,我想知道它花了多少行。 是否有内置函数在边界内绘制文本进行合理分割? 如果没有,是否有这样做的标准配方?

使用OpenGL ES 2.0绘制2D图像

我一直在努力使用openGL ES 2.0 for Android从jpg / png文件中绘制2D图像。 我看到的每个地方的教程都是用于纹理化3D图像,因此粗略地弄清楚如何绘制常规的2D Sprite。 我得到了一个正方形来绘制和旋转但是一旦它变成了纹理,我必须搞砸了某个地方,因为我一直收到一个错误,说DrawElements没有绑定任何数据,但如果我注释掉任何与纹理相关的代码,它工作正常。 任何帮助将不胜感激。 这是我的Sprite类和Renderer类的代码: public class Sprite { //Reference to Activity Context private final Context mActivityContext; //Added for Textures private final FloatBuffer mCubeTextureCoordinates; private int mTextureUniformHandle; private int mTextureCoordinateHandle; private final int mTextureCoordinateDataSize = 2; private int mTextureDataHandle; private final String vertexShaderCode = //Test “attribute vec2 a_TexCoordinate;” […]

Android – 如何绘制基于弧的渐变

我正在尝试创建一个逐渐从一种颜色到另一种颜色的弧(可变度数)。 例如从蓝色到红色: 这是我的代码: SweepGradient shader = new SweepGradient(center.x, center.y, resources.getColor(R.color.startColor),resources.getColor(R.color.endColor)); Paint paint = new Paint() paint.setStrokeWidth(1); paint.setStrokeCap(Paint.Cap.FILL); paint.setStyle(Paint.Style.FILL); paint.setShader(shader); canvas.drawArc(rectF, startAngle, sweepAngle, true, paint); 但结果是整个弧线涂上了相同的颜色。 编辑: 经过更多的实验,我发现颜色的扩散是由弧的角度决定的。 如果我绘制一个小角度的圆弧,则只显示第一种颜色。 角度越大,绘制的颜色越多。 如果角度很小,似乎没有梯度。 这是一个例子。 我画了4个弧–90,180,270和360: RectF rect1 = new RectF(50, 50, 150, 150); Paint paint1 = new Paint(); paint1.setStrokeWidth(1); paint1.setStrokeCap(Paint.Cap.SQUARE); paint1.setStyle(Paint.Style.FILL); SweepGradient gradient1 = new SweepGradient(100, 100, Color.RED, […]

Android车速表(针规)

创build一个简单的应用程序,计算你的速度,并显示在速度计graphics。 我可以做所有的速度计算,GPS计算等。但我不太确定animation。 除了温度计的例子之外,有没有人在针规上有很好的教程或例子?

在Unity中支持多种高宽比

我一直在试图创build一个支持Android和平板电脑的设备的每个纵横比的Unity 2D游戏。 有没有办法做到这一点,由Unity提供或推荐?

了解Android的Canvas.saveLayer(…)

我希望saveLayer方法将允许我绘制到不同的“图层”,然后一旦绘图完成,无论按照我select的顺序合并图层和canvas。 显而易见的问题是“为什么不重新安排你的绘图操作呢?” 答案是我不能: 我有一个path,我需要画在canvas上。 在后台/最低z-index我想绘制的path封闭,并使用填充样式一些额外的点。 最重要的是,我只想画出原来在path中的点的轮廓。 由于我无法撤消向Path添加点,我唯一的select是克隆path,或者绘制到第二个图层,以后可以放在其他任何图层上。 saveLayer()似乎提供了这种function,但它不像我期待的那样。 我的操作基本stream程是这样的: int overlay = canvas.saveLayer(…); // drawing operations for my uppermost layer … int background = canvas.saveLayer(…); // drawing operations for my background layer … // merge the offscreen background bitmap with the canvas: canvas.restoreToCount(background); // merge the offscreen overlay bitmap with the canvas: canvas.restoreToCount(overlay); 代码运行时,背景和叠加层的sorting完全没有改变; 先画的是底部,最后画的是顶部。 […]

Android上实时graphics编程的最佳语言是什么?

Google的一些使我相信C ++是实时2Dgraphics编程的最佳语言,但是由于Android是基于Java的,所以仍然是最好的select? 或者我们必须使用NDK来降低速度呢? 我的程序也有很多科学计算,我知道C ++是最好的/最快的… … 之前我从来没有对Android做任何事情,所以现在我真的很无奈。 如果我只是错误的方式,请给我其他的build议…我碰到的其他一些词汇是OpenGL(我有经验,但这更多的3D,对吧?)和帆布(不要相当得到这个)? 如果我能够获得像GPU一样的function,那就太棒了。