Hi Steve, Take a look at the LunarLander and Snake examples in the SDK for more ideas on how to organize your app.
LunarLander is similar, in that it creates a game thread and draws using a Handler and SurfaceView. Snake does not even create a separate thread. It instead sends delayed messages to a Handler. Cheers, James On Wed, Jan 21, 2009 at 1:24 PM, Streets Of Boston <[email protected]>wrote: > > The user-input is handled on the main message thread, the thread in > which your activity and your view report keypresses, touches, etc to > your activity. This will be done by the system calling your onKeyDown, > onTouchEvent, etc. methods. I think that surfaceCreated method is > called by the main message thread as well. > > Never execute a 'wait' or a 'sleep' in the main message thread. > > Instead, start the mPacManThread and let it run its course, i.e. > remove the 'Thread.sleep(...)' and the call to 'setRunning' > Then add the call 'postDelay(Runnable action, long delay)' with delay > set to 10 seconds. The Runnable 'action' should stop the > mPacManThread: > > public void surfaceCreated(SurfaceHolder holder) { > mPacManThread.setRunning(true); > mPacManThread.start(); > > //this thread will kill the mPacManThread thread after > 10 seconds. > someView.postDelay(new Runnable() { > public void run() { > // Stop the mPacManThread asap. > mPacManThread.setRunning(false); > } > }, 10000); > } > > Sending user-input to the mPacManThread needs to be done in your > view's onKeyDown, onTouchEvent implementations. > Use the methods Object.wait() (called by the mPacManThread) and > Object.notify() (called by the main message thread) to synchronize the > calls between the main message thread and the mPacManThread. > > If you're not sure how to do this, read up on Thread handling and > synchronization in Java :-) > > > On Jan 17, 5:55 am, steve_macleod <[email protected]> wrote: > > Hi, > > I am writing an application to get a grip of basic sprite animation. I > > have a surfaceCreated method which looks like this: > > > > public void surfaceCreated(SurfaceHolder holder) { > > mPacManThread.setRunning(true); > > mPacManThread.start(); > > //this thread will wait for 10 seconds, and then kill the > > mPacManThread thread > > > > try { > > Thread.sleep(10000); > > mPacManThread.setRunning(false); > > Log.d("THREAD STOPPED","The animation thread has > been stopped, as > > 10 seconds has elapsed."); > > > > } catch (InterruptedException e) { > > // TODO Auto-generated catch block > > e.printStackTrace(); > > } > > > > } > > > > The intention is to start the thread which manages the user input and > > animation, and make the main thread (that is the thread that started > > the view) sleep for 10 seconds, before stopping the animation loop. > > > > My understanding is that the Thread.sleep(10000) will sleep the thread > > from which the request originated (ie the main thread) for 10 seconds. > > > > However, it looks like the Thread.sleep() is actually working on the > > animation (mPacManThread) instead. Am I missing something fundamental > > here? > > > > Thanks, > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Beginners" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-beginners?hl=en -~----------~----~----~----~------~----~------~--~---

