我想创建一个2D游戏,我想知道哪条路可以根据我的知识背景和游戏本身的一些细节。
我的背景(相关内容):
我10天前开始学习android编程,我已经完成了游戏菜单。
我在java(用于桌面)编程方面有相当多的经验。
我在过去使用C ++中的openGL有一些经验,但只做了三件事(我也记不起很多东西)。我从来没有编写任何开放的GL着色器。我学习了基本的变换,如旋转/缩放/平移,应用纹理(纹理坐标)和一些非常原始的灯光。
游戏应该有:
精灵。每帧+ -50平均可见。
捏缩放/平移 手势。
此功能:能够将一个精灵移动到 另一个地方,用手指画出要跟随的路径。这个 应该可以在任何缩放级别。
声音。枪声,爆炸,简单的短音。
作为奖励,有一些效果会很好 像发光,扭曲效果等线,但事实并非如此 必需的。
应该有简单的方法来绘制圆形/正方形/三角形等几何形状(我的意思是不是在游戏中自己,而是用于开发它的API)
我想在半个月内完成比赛。
现在您认为最好的解决方案是游戏的特点,我的背景和可用的时间? OpenGL ES 2.0?帆布?或API /图形/游戏引擎/库(哪些,是否有文档/教程?)?
游戏本身很简单。我提到的东西真的很重要,至少对我而言。
答案 0 :(得分:7)
首先,Canvas无法进行游戏。然而,如果你看一下我完全用帆布“Squirrel Wars”(市场上)做的游戏,那就是关于在普通设备上使用画布的游戏的局限性。
使用Canvas的问题是你必须使用的内存的限制,& FPS的局限性,因为它不是硬件加速的。
最大的限制和我切换到OpenGL ES 1.1的原因之一是,如果需要,OpenGL将更容易移植到iOS。
同样使用OpenGL ES,你将拥有比你所做的更多的力量,更多的控制力,并且它应该足以容纳许多精灵,因为你可以放在屏幕上而不会弄乱它。
在我目前正在设计的Open GL游戏中,我能够以25-32 FPS的速度渲染300-400个精灵。
然而,通过将精灵的绘制限制在屏幕上的数字,更像是20-50,我坚持在60-70 FPS左右。
虽然OpenGL有一个学习曲线,但值得学习。我有一个2D框架,我在2D介绍和研究主题的过程中设计,它完美地满足了我所有的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");
}
}
我真的不想放弃一切,它的价值学习
但我创造了一种方式让我以一种非常有条理的方式处理所有事情,从创建顶点,纹理,动态文本到处理输入,伪造“Camera”管理帧速率独立运动,处理重力当我需要它时,检测碰撞和动画精灵。更不用说处理AdMob广告,inAppBilling以及所有需要的声音。
刚开始阅读。它遍布网络和书籍。如果你能找到一本好书,值得投资40美元。
您需要自定义的许多代码。但值得建立自己的框架。
我再次推荐OpenGL 1. * 兼容您可能想要的所有设备。
开始使用我给你的代码,将其粘贴到你的活动中,右键单击对象,然后创建他们的类。 Eclipse将自动告诉/填充很多基本的东西。
答案 1 :(得分:3)
如果您想要包含Android 3.0以前的设备,我不会使用画布。这不是硬件加速,所以你会得到非常可怕的帧率。
我在我的android 2.3设备上做了一些小帆布试验,即使使用高端处理器,我也无法在没有严重卡顿的情况下在屏幕上滑动纹理方块。
Android 3& 4有硬件加速视图,但对于2.3我认为你真的需要GPU利用来制作任何可远程播放的东西。如果你没有GPU加速,你可能会忘记特效(粒子,发光等)。
OpenGL我相信是这里的方法,或者你可以使用OpenGL包装器库(AndEngine似乎很受欢迎),如果你不想自己处理API。
答案 2 :(得分:0)
我建议使用AndEngine制作游戏。它是硬件加速的(使用OpenGL ES)并提供良好的API来操作精灵。