It's pretty easy to do this:

I use a World to write to and read from for the two "sides."  Makes
networking nice too.  My World has a simple lock.  Only one thing can
write to it or read from it at a time.

in GameLogicThread:

run() {
 while (!done) {
  // wait for renderer
  world.getLock(); // blocks
  update()
  world.releaseLock();
 }
}

in Renderer:

onDrawFrame() {
  world.getLock(); // blocks
  draw()
  world.releaseLock();
}

On Apr 9, 3:27 am, Clankrieger <tob...@googlemail.com> wrote:
> Hi,
>
> I had a lot of difficulties getting the threading and app lifecycle
> issues done, too. For my part, this was much more confusing than
> getting the actual game done. ;)
>
> The good thing is: you do not have to do too much for the render- and
> logic-thread separation because most of the rendering time is getting
> spent "outside" of your renderer's onDraw method. This is how I got
> this done: The "Game" itself is owned by the glSurfaceView renderer
> instance. the when the game starts (at onResume), I start an
> updatethread that is very simple an does something like
>
> while(bKeeprunning) {
>   synchronized(Game.sInstance) {
>     Game.sInstance.update();
>   }
>   Thread.sleep(50);
>
> }
>
> I have to add that my game logic is doing only this: logic. The world
> gets simulated. This is done less than 10 times per second - this is
> why I can have it sleep for 50 ms. sleeping is important here to give
> the render thread time to do this (I don't remember the full method
> signature, but I think you know what I mean):
>
> onDrawGlFrame() {
>   synchronized(Game.sInstance) {
>     Game.sInstance.render();
>   }
>   Thread.sleep(5);
>
> }
>
> I defined the updatethread as class inside of the Renderer because it
> is so small. This gave me a huge performance boost. Handling the app
> lifecycle is less easy (at least for me).
>
> On Apr 9, 3:09 am, Eddie Ringle <ed...@eringle.net> wrote:
>
>
>
> > Surprisingly, I don't seem to have issues with the OpenGL side of
> > things (which is very unusual), but my problems stem from getting a
> > clear idea for app architecture and a few other problems.
> > Right now, most tutorials on the net just describe the render portion.
> > I know that when I create a GLSurfaceView and hook a Renderer into it,
> > it uses it's own thread for rendering.
>
> > I want to do logic operations and other gameplay stuff (like moving
> > characters and whatnot) in it's own thread as well. Can anyone explain
> > a good approach to this? I'm guessing the two threads will have to be
> > synchronized (do logic, render, repeat), and limited based on time so
> > that it performs smoothly across different devices.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

To unsubscribe, reply using "remove me" as the subject.

Reply via email to