"Does that mean you're working on a scorched earth type game?"

Maybe.      :)


On Apr 16, 8:53 am, john <jbatk...@gmail.com> wrote:
> 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 thescreen.
> >         canvas.drawBitmap(backgroundImage, 0, 0, null);
>
> >         //draw the up-to-date, deformed foreground
> >         terrain.draw(canvas);
>
> >         //draw all bodies (players, projectiles, etc) on thescreen
> >         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
-~----------~----~----~----~------~----~------~--~---

Reply via email to