4

我想创建一个 2d 游戏,我想知道我的知识背景和游戏本身的一些细节应该走哪条路。

我的背景(相关的东西):

  • 我10天前开始学习android编程,我已经完成了游戏菜单。

  • 我有相当多的java编程经验(用于桌面)。

  • 我过去在 C++ 中使用 openGL 有一些经验,但只做 3d 的东西(而且我不记得我学到的很多东西)。我从未编写过任何开放的 GL 着色器。我学习了诸如旋转/缩放/平移之类的基本变换、应用纹理(纹理坐标)和一些非常原始的灯光之类的东西。

游戏应该有:

  • 精灵。每帧平均可见 +-50。

  • 捏缩放/平移手势。

  • 此功能:例如能够将一个精灵移动到另一个地方,使用手指绘制要遵循的路径。这在任何缩放级别都应该是可能的。

  • 听起来。枪声、爆炸声、简单的短声。

  • 作为奖励,最好有一些效果,如带有发光的线条、扭曲效果等,但这实际上不是必需的。

  • 应该有简单的方法来绘制几何形状,如圆形/正方形/三角形/等(我的意思不是在游戏本身,而是在用于开发它的 API 中)

我想在 1/2 个月内完成游戏。

现在,考虑到游戏的特点、我的背景和可用的时间,你认为最好的解决方案是什么?OpenGL ES 2.0?帆布?或 API/图形/游戏引擎/库(哪些,是否有文档/教程?)?

游戏本身很简单。我提到的事情在这里真的很重要,至少对我来说。

与我共享特征的游戏示例如下: OsmosSpirit

4

3 回答 3

7

首先,Canvas 并非不能做游戏。但是,如果您看一下我完全使用画布“松鼠大战”(市场上)制作的游戏,那就是关于在普通设备上使用画布的游戏的局限性。

使用 Canvas 的问题是对您必须使用的内存的限制,以及 FPS 的限制,因为它不是硬件加速的。

最大的限制也是我切换到 OpenGL ES 1.1 的原因之一是,如果需要,OpenGL 将使移植到 iOS 变得更加容易。

同样使用 OpenGL ES,您将对您所做的事情拥有更多的权力,更多的控制,并且它应该足以容纳许多精灵,因为您可以在屏幕上放置而不会使屏幕混乱。

在我正在设计的当前 Open GL 游戏中,我能够以 25-32 FPS 的速度每帧渲染 300-400 个精灵。

然而,通过将精灵的绘制限制为屏幕上的内容,更像是 20-50,我坚持大约 60-70 FPS。

虽然 OpenGL 有一个学习曲线,但值得学习。我有一个 2D 框架,我在介绍和研究该主题的 2 天内设计,它完美地满足了我所有的 2D 需求。

我现在可以将我的 FrameWork 重新用于我想设计的任何 2D 游戏。

无需付出太多,这里有一些代码可以让你开始

    import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;

public class RunGameActivity extends Activity{
private GLSurfaceView glSurfaceView;
private GLRenderer GLRENDERER;

@Override
public void onCreate(Bundle savedInstanceState) {
    /***************************************************************************************** 
     * This is called when this activity is first creates.
     * First we remove the title bar, make our app full screen
     * It is set to landscape in the manifest file.
     * We than create our OPENGL ES surfaceview and its renderer for us to use
     * and finally setContentView() view so we see the OPENGL ES surfaceview
     * ***************************************************************************************/
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);

    Log.d("RunGameActivity", "onCreate");

    glSurfaceView = new GLSurfaceView(this);
    GLRENDERER = new GLRenderer(this);
    glSurfaceView.setRenderer(GLRENDERER);
    setContentView(glSurfaceView);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    /***************************************************************************************** 
     * Here we get the incoming on touch event and send it down towards our game
     * via the GLRenderer class. The game does all the actual work with it.
     * ***************************************************************************************/
    Log.d("RunGameActivity", "OnTouchEvent");
synchronized(this) {
        GLRENDERER.HandleMotionEvent(event);
}
    return true;
}



/* Remember to resume the glSurface  */
@Override
protected void onResume() {
    /***************************************************************************************** 
     * Called when app resumes
     * ***************************************************************************************/
    super.onResume();
    glSurfaceView.onResume();
    Log.d("RunGameActivity", "onResume");
}

/* Also pause the glSurface  */
@Override
protected void onPause() {
    /***************************************************************************************** 
     * Called when app pauses
     * ***************************************************************************************/
    super.onPause();
    glSurfaceView.onPause();
    Log.d("RunGameActivity", "onPause");
}

}

我真的不想放弃一切,值得学习

但是我已经为我创造了一种以非常有条理的方式处理所有事情的方法,从创建顶点、纹理、动态文本到处理输入、伪造一个管理帧速率独立运动的“相机”、处理重力当我需要它时、检测碰撞, 和动画精灵。更不用说,处理 AdMob 广告、inAppBilling 以及 Ill 需要的所有声音。

刚开始阅读。它遍布网络和书籍。如果你能找到一本好书,值得投资 40 美元。

很多代码您必须自己自定义创建。但值得建立自己的框架。

我再次推荐 OpenGL 1.* 兼容您可能想要的所有设备。

要开始使用我给您的代码,请将其复制粘贴到您的活动中,右键单击对象,然后创建它们的类。Eclipse 会自动告诉/填充很多基本的东西给你。

于 2012-08-10T02:55:46.067 回答
3

如果您想包含 Android 3.0 之前的设备,我不会使用画布。它不是硬件加速的,所以你会得到非常糟糕的帧速率。

我在我的 android 2.3 设备上对画布做了一些试验,即使使用高端处理器,我也无法让带纹理的正方形在屏幕上滑动而不会出现严重的卡顿。

Android 3 和 4 具有硬件加速视图,但对于 2.3,我认为您确实需要 GPU 利用率来使任何东西都可以远程播放。如果您没有 GPU 加速,您也可能会忘记特殊效果(粒子、发光等)。

OpenGL 我相信是这里的方法,或者如果你不想自己处理 API,你可以使用 OpenGL 包装库(AndEngine 似乎很流行)。

于 2012-08-10T01:20:24.960 回答
0

我建议使用 AndEngine 来制作游戏。它是硬件加速的(使用 OpenGL ES)并提供良好的 API 来操作精灵。

于 2012-08-13T08:36:41.680 回答