javaME游戏创建帮助

时间:2011-01-29 10:21:43

标签: java java-me

我坚持如何继续为我的项目创建一个简单的游戏,它只是一个益智游戏,我在背景上有一个图像,框将覆盖图像,框将匹配,何时匹配他们将删除自己以揭示图像的一部分,目前我所做的是绘制网格,但我怎么能让他们相互堆叠?我是否将每个生成的网格设为图像项目? enter image description here

生成块的画布

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.Sprite;


    public class blockcanvas extends Canvas
{
   private Image pokeballImage;
   private int screenW,screenH,imageW,imageH;

   public blockcanvas()
   {
        //get screen size
        screenW = getWidth();
        screenH = getHeight();

        try {
                pokeballImage = Image.createImage("/pokeball.png");
                imageW = pokeballImage.getWidth();
                imageH = pokeballImage.getHeight();
        } catch (IOException e) {
                e.printStackTrace();
        }
   }

    protected void paint(Graphics g) {
        g.setColor(255,255,255);
        g.fillRect(0,0,getWidth(),getHeight());
        drawPokeBall(g);

    }

    public void drawPokeBall(Graphics g)
    {
        int maxNumberOfBlockX = screenW / imageW;
        int maxNumberOfBlockY = screenH / imageH;

        Sprite pokeball = new Sprite(pokeballImage);
        pokeball.defineCollisionRectangle(0,0,20,20);
        pokeball.defineReferencePixel(imageW/2,imageH/2);
        for (int i = 0; i <maxNumberOfBlockX; i++)
        {
            pokeball.setRefPixelPosition(i*20,0);
            pokeball.paint(g);
        }
        for (int i = 0; i <maxNumberOfBlockY; i++)
        {
            pokeball.setRefPixelPosition(0,i*20);
            pokeball.paint(g);
        }
        System.out.println(maxNumberOfBlockX);

    }


}

要用块覆盖的图像的画布

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


    public class gameCanvas extends Canvas
{
   private Image image;
   private int screenW,screenH;
    blockcanvas block;

   public gameCanvas()
   {
        block = new blockcanvas();
        //get screen size
        screenW = getWidth()/2;
        screenH = getHeight()/2;

        try {
                image = Image.createImage("/gby001.gif");

        } catch (IOException e) {
                e.printStackTrace();
        }
   }

    protected void paint(Graphics g) {
        g.setColor(255,255,255);
        g.fillRect(0,0,getWidth(),getHeight());
        g.drawImage(resizeImage(image), 10, 10, Graphics.TOP | Graphics.LEFT);
        block.drawPokeBall(g);
    }

    private Image resizeImage(Image src) {
      int srcWidth = src.getWidth();
      int srcHeight = src.getHeight();
      Image tmp = Image.createImage(screenW, srcHeight);
      Graphics g = tmp.getGraphics();
      int ratio = (srcWidth << 16) / screenW;
      int pos = ratio/2;

      //Horizontal Resize        

      for (int x = 0; x < screenW; x++) {
          g.setClip(x, 0, 1, srcHeight);
          g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT | Graphics.TOP);
          pos += ratio;
      }

      Image resizedImage = Image.createImage(screenW, screenH);
      g = resizedImage.getGraphics();
      ratio = (srcHeight << 16) / screenH;
      pos = ratio/2;        

      //Vertical resize

      for (int y = 0; y < screenH; y++) {
          g.setClip(0, y, screenW, 1);
          g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT | Graphics.TOP);
          pos += ratio;
      }
      return resizedImage;

  }//resize image    



}

主要应用

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.microedition.lcdui.Canvas;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
/**
 * @author Lotus
 */
public class game extends MIDlet  implements CommandListener{
    //Variables Declartion
    private Display theDisp;
    private Command cmdExit,cmdGuess,cmdReturn;
    private gameCanvas canvas1;
    private blockcanvas canvas2;
    private Image gameImage;
    public game()
    {
       theDisp = Display.getDisplay(this);
       cmdExit = new Command("Exit",Command.EXIT,1);
       cmdGuess = new Command("Guess",Command.SCREEN,2);
       cmdReturn = new Command("Back",Command.BACK,2);
       canvas1 = new gameCanvas();
       canvas2 = new blockcanvas();
       canvas1.addCommand(cmdExit);
       canvas1.addCommand(cmdGuess);
       canvas1.setCommandListener(this);


    }
    public void startApp() {
    theDisp.setCurrent(canvas1);
    }

    public void pauseApp() {

    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {

        if(c == cmdExit)
        {
            destroyApp(true);
            notifyDestroyed();
        }
        else if(c== cmdGuess)
        {

        }

    }


}

1 个答案:

答案 0 :(得分:0)

您可能想要更改

g.fillRect(i, i, 20, 20);

类似

g.fillRect(i*20, i*20, 20, 20);