まず、Canvasはゲームを実行できません。しかし、私が完全にキャンバス「Squirrel Wars」(市販)で行ったゲームを見ると、それは平均的なデバイスでキャンバスを使用するゲームの制限についてです。
Canvasの使用に関する問題は、操作する必要のあるメモリの制限と、ハードウェアアクセラレーションされていないためのFPSの制限です。
最大の制限であり、OpenGL ES 1.1に切り替える理由の1つは、OpenGLを使用すると、必要に応じてiOSへの移植がはるかに簡単になることです。
また、OpenGL ESを使用すると、実行する操作を大幅に制御でき、画面を乱雑にすることなく画面に収まるように、多くのスプライトを保持するのに十分なはずです。
私が設計している現在のOpenGLゲームでは、300〜400のスプライトを25〜32FPSでフレームにレンダリングできます。
ただし、スプライトの描画を画面上のものに制限することで、20〜50のように、約60〜70FPSを維持します。
OpenGLには学習曲線がありますが、学ぶ価値はあります。紹介されてトピックを調査してから2日間で設計した2DFrameWorkがあり、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、およびこれまでに必要となるすべてのサウンドを処理します。
読み始めてください。そのウェブ全体、そして本の中で。あなたが良い本を見つけることができれば40ドルの投資の価値があります。
自分でカスタム作成する必要のあるコードの多く。ただし、独自のフレームワークを設定する価値はあります。
繰り返しになりますが、OpenGL1をお勧めします。*必要なすべてのデバイスと互換性があります。
提供したコードを開始するには、コードをコピーしてアクティビティに貼り付け、オブジェクトを右クリックして、クラスを作成します。Eclipseは、基本的なものの多くを自動的に通知/入力します。