【发布时间】:2026-01-26 22:20:11
【问题描述】:
我研究和制作小游戏已经有一段时间了,最近我决定尝试为 Android 开发游戏。
对我来说,从原生 C++ 代码跳转到 Android Java 并不难,但让我头疼的是如何将逻辑与渲染分开。
我一直在这里和其他网站上阅读:
最好不要为它创建另一个线程,因为 Android 肯定不会有处理问题。
意思是代码是这样的:
public void onDrawFrame(GL10 gl) {
doLogicCalculations();
clearScreen();
drawSprites();
}
但我不确定这是否是最好的方法。因为我认为我不喜欢将我的逻辑放在GLRenderer::onDrawFrame 方法中的样子。据我所知,这种方法只是为了绘制,如果我把逻辑放在那里,我可能会减慢帧的速度。更不用说它伤害了我理解的 POO 概念。
我认为使用线程可能是一种方式,这就是我的计划:
主要活动:
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();
}
}
这是一个粗略的想法,并不完全完整。 这种模式可以将它们全部分开,并且看起来会更好一些,但它对性能来说是最好的吗?
只要我研究过,大多数线程游戏的例子都使用画布或表面视图,这些都不适合我的情况,因为我使用的是 OpenGLES。
所以这是我的问题:
什么是分开我的最好的方法 使用OpenGLES时渲染的游戏逻辑?穿线我的 应用?将逻辑放在一个单独的方法中,然后从 绘制方法?
【问题讨论】: