首先,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 会自动告诉/填充很多基本的东西给你。