abstract Sprite : Sprite « Game « Android






abstract Sprite

   
/*
 *                 [[ Frozen-Bubble ]]
 *
 * Copyright (c) 2000-2003 Guillaume Cottenceau.
 * Java sourcecode - Copyright (c) 2003 Glenn Sanson.
 *
 * This code is distributed under the GNU General Public License
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *
 * Artwork:
 *    Alexis Younes <73lab at free.fr>
 *      (everything but the bubbles)
 *    Amaury Amblard-Ladurantie <amaury at linuxfr.org>
 *      (the bubbles)
 *
 * Soundtrack:
 *    Matthias Le Bidan <matthias.le_bidan at caramail.com>
 *      (the three musics and all the sound effects)
 *
 * Design & Programming:
 *    Guillaume Cottenceau <guillaume.cottenceau at free.fr>
 *      (design and manage the project, whole Perl sourcecode)
 *
 * Java version:
 *    Glenn Sanson <glenn.sanson at free.fr>
 *      (whole Java sourcecode, including JIGA classes
 *             http://glenn.sanson.free.fr/jiga/)
 *
 * Android port:
 *    Pawel Aleksander Fedorynski <pfedor@fuw.edu.pl>
 *
 *          [[ http://glenn.sanson.free.fr/fb/ ]]
 *          [[ http://www.frozen-bubble.org/   ]]
 */

//package ch.racic.frozenegg;

import java.util.Vector;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Bundle;

public abstract class Sprite
{
  public static int TYPE_BUBBLE = 1;
  public static int TYPE_IMAGE = 2;
  public static int TYPE_LAUNCH_BUBBLE = 3;
  public static int TYPE_PENGUIN = 4;

  private Rect spriteArea;
  private int saved_id;

  public Sprite(Rect spriteArea)
  {
    this.spriteArea = spriteArea;
    saved_id = -1;
  }

  public void saveState(Bundle map, Vector saved_sprites)
  {
    if (saved_id != -1)
      return;
    saved_id = saved_sprites.size();
    saved_sprites.addElement(this);
    map.putInt(String.format("%d-left", saved_id), spriteArea.left);
    map.putInt(String.format("%d-right", saved_id), spriteArea.right);
    map.putInt(String.format("%d-top", saved_id), spriteArea.top);
    map.putInt(String.format("%d-bottom", saved_id), spriteArea.bottom);
    map.putInt(String.format("%d-type", saved_id), getTypeId());
  }

  public final int getSavedId()
  {
    return saved_id;
  }

  public final void clearSavedId()
  {
    saved_id = -1;
  }

  public abstract int getTypeId();

  public void changeSpriteArea(Rect newArea)
  {
    spriteArea = newArea;
  }

  public final void relativeMove(Point p)
  {
    spriteArea = new Rect(spriteArea);
    spriteArea.offset(p.x, p.y);
  }

  public final void relativeMove(int x, int y)
  {
    spriteArea = new Rect(spriteArea);
    spriteArea.offset(x, y);
  }

  public final void absoluteMove(Point p)
  {
    spriteArea = new Rect(spriteArea);
    spriteArea.offsetTo(p.x, p.y);
  }

  public final Point getSpritePosition()
  {
    return new Point(spriteArea.left, spriteArea.top);
  }

  public final Rect getSpriteArea()
  {
    return spriteArea;
  }

  public static void drawImage(BmpWrap image, int x, int y,
      Canvas c, double scale, int dx, int dy)
  {
    c.drawBitmap(image.bmp, (float)(x * scale + dx), (float)(y * scale + dy),
        null);
  }

  public static void drawImageClipped(BmpWrap image, int x, int y, Rect clipr,
      Canvas c, double scale, int dx, int dy)
  {
    c.save(Canvas.CLIP_SAVE_FLAG);
    c.clipRect((float)(clipr.left * scale + dx),
        (float)(clipr.top * scale + dy),
        (float)(clipr.right * scale + dx),
        (float)(clipr.bottom * scale + dy),
        Region.Op.REPLACE);
    c.drawBitmap(image.bmp, (float)(x * scale + dx), (float)(y * scale + dy),
        null);
    c.restore();
  }

  public abstract void paint(Canvas c, double scale, int dx, int dy);
}
/*
 *                 [[ Frozen-Bubble ]]
 *
 * Copyright (c) 2000-2003 Guillaume Cottenceau.
 * Java sourcecode - Copyright (c) 2003 Glenn Sanson.
 *
 * This code is distributed under the GNU General Public License
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *
 * Artwork:
 *    Alexis Younes <73lab at free.fr>
 *      (everything but the bubbles)
 *    Amaury Amblard-Ladurantie <amaury at linuxfr.org>
 *      (the bubbles)
 *
 * Soundtrack:
 *    Matthias Le Bidan <matthias.le_bidan at caramail.com>
 *      (the three musics and all the sound effects)
 *
 * Design & Programming:
 *    Guillaume Cottenceau <guillaume.cottenceau at free.fr>
 *      (design and manage the project, whole Perl sourcecode)
 *
 * Java version:
 *    Glenn Sanson <glenn.sanson at free.fr>
 *      (whole Java sourcecode, including JIGA classes
 *             http://glenn.sanson.free.fr/jiga/)
 *
 * Android port:
 *    Pawel Aleksander Fedorynski <pfedor@fuw.edu.pl>
 *
 *          [[ http://glenn.sanson.free.fr/fb/ ]]
 *          [[ http://www.frozen-bubble.org/   ]]
 */


// Various classes take arguments of this type during construction.  We need
// one level of indirection in case we want to swap the images from under them
// (e.g., to resize them when the surface resolution changes.)  We couldn't
// do it if references to Bitmap were kept directly everywhere since you can't
// overwrite an Android Bitmap in place (or at least I haven't found how to
// do it.)
class BmpWrap {
  BmpWrap(int id)
  {
    this.id = id;
  }

  public Bitmap bmp;
  // Image id used for saving and restoring the image sprites.
  public int id;
}

   
    
    
  








Related examples in the same category

1.Penguin Sprite
2.A simple runnable that updates the position of each sprite on the screen every frame by applying a very simple gravity and bounce simulation.