gpt4 book ai didi

用于 2d 游戏的 Android Canvas 或 Open GL ES?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:46 27 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。


1年前关闭。







Improve this question




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

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

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

  • 游戏应该有:
  • Sprite 。每帧平均可见 +-50。
  • 捏缩放/平移
    手势。
  • 此功能:能够将例如一个 Sprite 移动到
    另一个地方,用手指画出要遵循的路径。这个
    应该可以在任何缩放级别。
  • 听起来。枪声、爆炸声、简单的短声。
  • 作为奖励,有一些效果会很好
    像带有发光、扭曲效果等的线条,但这真的不是
    必需的。
  • 应该有简单的方法来绘制圆形/正方形/三角形等几何形状(我的意思不是在游戏本身,而是在用于开发它的 API 中)

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

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

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

    与我共享特征的游戏示例如下:
    Osmos ,
    Spirit

    最佳答案

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

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

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

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

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

    然而,通过将 Sprite 的绘制限制为屏幕上的内容,更像是 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");
    }

    }

    我真的不想放弃一切,它的值(value) 学习

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

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

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

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

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

    关于用于 2d 游戏的 Android Canvas 或 Open GL ES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894182/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com