2011-01-29 117 views
1

我被困在如何繼續爲我的項目創建一個簡單的遊戲,它只是一個益智遊戲,我有一個圖像的背景和框將覆蓋圖像,框是被匹配,當匹配時他們會移除自己揭示圖像的一部分,目前我所做的是繪製網格,但我怎樣才能使它們相互堆疊?我是否讓每個生成的網格成爲imageitem? enter image description herejavaME遊戲創建幫助

生成塊

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) 
     { 

     } 

    } 


} 
+0

只是注意,你的遊戲代碼的設計似乎差了我。許多`畫布'可能難以處理,無論如何,`GameCanvas`對於遊戲來說更好,而不僅僅是遊戲。 – 2011-01-29 13:47:53

+0

謝謝,我剛剛開始,我只知道畫布的一些知識,不知道什麼gamecanvas – sutoL 2011-01-29 13:57:05

回答

0

你可能想更改

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

喜歡的東西

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