我坚持如何继续为我的项目创建一个简单的游戏,它只是一个益智游戏,我在背景上有一个图像,框将覆盖图像,框将匹配,何时匹配他们将删除自己以揭示图像的一部分,目前我所做的是绘制网格,但我怎么能让他们相互堆叠?我是否将每个生成的网格设为图像项目?
生成块的画布
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 :(得分:0)
您可能想要更改
g.fillRect(i, i, 20, 20);
类似
g.fillRect(i*20, i*20, 20, 20);