Your package is package com.baltz.scorched; Does that mean you're working on a scorched earth type game? It would be really crazy if you were, because I just started work on the same game, and I'm using the LunarLander game as a template as well.
It's also my first game - maybe we can help each other out! -Rick On Apr 15, 10:25 pm, Warren <warrenba...@gmail.com> wrote: > Sarnoth, I appreciate you taking the time to comment. > > Does that matter - if the thread isn't different? > > Just in case there were problems with the thread, I rewrote the > program not to use a second thread and just execute the drawing loop > in the view. > > In the code sample, I also changed draw() to drawSprites(), as I > described in an earlier post. Neither of these things helped. > > ====== Begin Code ====== > > package com.baltz.scorched; > > import android.content.Context; > import android.content.res.Resources; > import android.graphics.Bitmap; > import android.graphics.BitmapFactory; > import android.graphics.Canvas; > import android.util.AttributeSet; > import android.util.Log; > import android.view.SurfaceHolder; > import android.view.SurfaceView; > > class ScorchedView extends SurfaceView implements > SurfaceHolder.Callback { > > private Context context; > private SurfaceHolder holder; > > private Bitmap backgroundImage; > private Bitmap foregroundImage; > private Bitmap spriteImage; > > private Resources resources; > private ScorchedTerrain terrain; > private Engine engine; > > public ScorchedView(Context c, AttributeSet attrs) { > super(c, attrs); > // register our interest in hearing about changes to our > surface > holder = getHolder(); > holder.addCallback(this); > > context = c; > > resources = context.getResources(); > > // load background image as a Bitmap instead of a Dable b/c > // we don't need to transform it and it's faster to d this way > backgroundImage = BitmapFactory.decodeResource(resources, > R.drawable.earthrise); > > foregroundImage = BitmapFactory.decodeResource(resources, > R.drawable.foreground1); > > spriteImage = BitmapFactory.decodeResource(resources, > R.drawable.sprite1); > > terrain = new ScorchedTerrain(foregroundImage); > > engine = new Engine(); > Body body; > > body = new Body(spriteImage); > body.setLocation(50, 50); > engine.addBody(body); > > body = new Body(spriteImage); > body.setLocation(40, 100); > engine.addBody(body); > } > > /* Callback invoked when the surface dimensions change. */ > public void surfaceChanged(SurfaceHolder h, int format, int width, > int height) { > holder = h; > } > > /* > * Callback invoked when the Surface has been created and is ready > to be > * used. > */ > public void surfaceCreated(SurfaceHolder h) { > holder = h; > gameLoop(); > } > > /* > * Callback invoked when the Surface has been destroyed and must > no longer > * be touched. WARNING: after this method returns, the Surface/ > Canvas must > * never be touched again! > */ > public void surfaceDestroyed(SurfaceHolder holder) { > } > > private void gameLoop(){ > > Canvas canvas; > > int i=0; > while(i<30){ > canvas = null; > try { > canvas = holder.lockCanvas(null); > engine.update(); > drawSprites(canvas); > } finally { > // do this in a finally so that if an exception is thrown > // during the above, we don't leave the Surface in an > // inconsistent state > if (canvas != null) { > Log.w("dbg", "unlocking canvas" + i); > holder.unlockCanvasAndPost(canvas); > } > } > > try{ > Thread.currentThread().sleep(300); > } > catch(Exception e){ > } > i++; > } > } > > /** > * Draws the sprites and background to the provided > * Canvas. > */ > public void drawSprites(Canvas canvas) { > // Draw the background image. Operations on the Canvas > accumulate > // so this is like clearing the screen. > canvas.drawBitmap(backgroundImage, 0, 0, null); > > //draw the up-to-date, deformed foreground > terrain.draw(canvas); > > //draw all bodies (players, projectiles, etc) on the screen > engine.drawAll(canvas); > } > > } > > On Apr 15, 4:47 pm, Sarnoth <jesse.st...@gmail.com> wrote: > > > I can't really say without seeing more of the code, but based on your > > description of the problem I wonder if your thread is in fact a > > separate thread or if the run method is simply being executed in the > > main UI thread. Something worth checking. You can log > > Thread.currentThread().getName() from inside your run method and from > > inside your activity's onCreate method to make sure they are > > different. > > > On Apr 15, 9:57 am, Warren <warrenba...@gmail.com> wrote: > > > > I may have found my problem. > > > > The SurfaceView class implements a function called draw(Canvas). > > > > I unwittingly created my own function draw() with the same signature, > > > overriding the original. I'm guessing that the SurfaceView probably > > > calls draw() duringunlockCanvasAndPost(). But instead of executing > > > its original draw() method and doing what it is supposed to do, it > > > calls my function - simply overwriting the canvas buffer without > > > affecting the Surface at all... thus theblackscreen. I'm still > > > confused about why it eventually shows. Perhaps some final cleanup > > > code... > > > > I will test this tonight when I have access to my development computer > > > and post my findings. > > > > On Apr 15, 8:48 am, Warren <warrenba...@gmail.com> wrote: > > > > > Thanks for the comment ellipsoidmobile. > > > > > If I remove the sleep, I still don't see anything until the very end. > > > > I don't need that sleep in there for the application. I only put it in > > > > so that, hopefully, I could see what was happening a little better. > > > > > Also, I thought that the SurfaceView allowed you to write to the > > > >screenat your own pace, whatever that may be. So in this case, there > > > > would be nothing "from the outside" that's causing ascreenrefresh. > > > > Thescreenshould stay how I left it until I post a new canvas. Am I > > > > misunderstanding this? > > > > > What really confuses me is why the last call tounlockCanvasAndPost() > > > > does work. It seems like if an error prevented the first calls from > > > > functioning, then it would also prevent the last. > > > > > On Apr 15, 3:09 am, "ellipsoidmob...@googlemail.com" > > > > > <ellipsoidmob...@googlemail.com> wrote: > > > > > The problem is your line Thread.currentThread().sleep(1000);//sleep > > > > > for 1000 ms > > > > > > I believe with SurfaceView you have to draw your whole view on > > > > > everyscreenrefresh. You just need to loop as fast as possible and the > > > > > system will throttle the speed in the calls to lockCanvas(). By > > > > > sleeping for 1 second you are failing to provide a canvas for every > > > > > refresh so thescreenappears blank. > > > > > > What I don't know is whether there is any guidance on how quickly you > > > > > have to get through your loop, i.e. what the maximum refresh rate is > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---