我一直在研究和製作小遊戲,最近我決定嘗試爲Android開發遊戲。使用OpenGL將遊戲邏輯與用於Android的快節奏遊戲渲染分離的最佳方法?
對我來說,從本地C++代碼跳轉到Android Java並不難,但是讓我頭痛的是如何能夠保持與渲染分離的邏輯。
我一直在讀在這裏和其他網站上:
最好是肯定有處理沒有問題,不爲它創建另一個線程,只是因爲 Android將。
含義代碼將是這樣的:
public void onDrawFrame(GL10 gl) {
doLogicCalculations();
clearScreen();
drawSprites();
}
但我不知道那將是最好的辦法。因爲我不認爲我喜歡如果將我的邏輯放在GLRenderer::onDrawFrame
方法內的樣子。據我所知,這種方法只是爲了繪製,如果我把邏輯放在那裏,我可能會放慢幀速度。更不用說在我的理解中它傷害了「公安條例」的概念。
我覺得用線程可能是這樣,這是我的打算:
主要活動:
public void onCreate(Bundle savedInstanceState) {
//set fullscreen, etc
GLSurfaceView view = new GLSurfaceView(this);
//Configure view
GameManager game = new GameManager();
game.start(context, view);
setContentView(view);
}
遊戲管理:
OpenGLRenderer renderer;
Boolean running;
public void start(Context context, GLSurfaceView view) {
this.renderer = new OpenGLRenderer(context);
view.setRenderer(this.renderer);
//create Texturelib, create sound system...
running = true;
//create a thread to run GameManager::update()
}
public void update(){
while(running){
//update game logic here
//put, edit and remove sprites from renderer list
//set running to false to quit game
}
}
最後,OpenGLRenderer:
ListOrMap toDraw;
public void onDrawFrame(GL10 gl) {
for(sprite i : toDraw)
{
i.draw();
}
}
這是一個粗略的想法,並不完整。 這種模式會保持所有的分離,看起來會更好一點,但它是最好的性能?
只要我研究過,線程遊戲的大多數示例都使用canvas或surfaceview,那些將不適合我的情況,因爲我使用的是OpenGLES。
因此,這裏是我的問題:
這是使用OpenGLES當我 遊戲邏輯從繪製中分離出來的最佳方法?線程我的 應用程序?把邏輯放在一個單獨的方法中,並從 中調用它的繪製方法?
嗯,作爲你的最後一個主題摘要,OpenGLrenderer的onDrawFrame在另一個線程上調用?或者只是作爲請求發送到與GL相關的其他線程的gl.GLxxx()。 – 2011-12-15 16:05:09
@Gtoknu當你調用`onDrawFrame()`時,你在另一個線程中。看到這裏:http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html – 2011-12-15 16:24:04