📄 mycanvas.java
字号:
import java.io.IOException;
import java.util.Vector;
//Download by http://www.codefans.net
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
public class MyCanvas extends GameCanvas implements Runnable {
HeroSprite mHero;
TiledLayer mLayer;
LayerManager mLm;
TiledLayer mBoxLayer;
Sprite mD;
Vector mBulletVec;
Vector mEnemyVec;
Vector mExplodeVec;
int mCounter = 0;
Image birdImg = null;
Image explodeImg=null;
protected MyCanvas() {
super(true);
Image img = null;
Image heroImg = null;
Image DImg = null;
try {
img = Image.createImage("/back2.png");
heroImg = Image.createImage("/164-Small06.png");
DImg = Image.createImage("/bullet.png");
birdImg = Image.createImage("/flyer128X192_1.png");
explodeImg=Image.createImage("/Explosion.png");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HeroSprite.mImgBullet = DImg;
HeroSprite.mBulletH = HeroSprite.mBulletW = 8;
mLayer = new TiledLayer(10, 15, img, 32, 32);
mLayer.fillCells(0, 0, 10, 15, 1);
mHero = new HeroSprite(heroImg, 56, 40);
mBoxLayer = new TiledLayer(10, 15, img, 32, 32);
for (int i = 0; i < 10; i++)
for (int j = 0; j < 15; j++)
mBoxLayer.setCell(i, j, mBoxMap[j][i]);
mD = new Sprite(DImg, 8, 8);
mLm = new LayerManager();
mLm.append(mHero);
mLm.append(mBoxLayer);
mLm.append(mLayer);
mBulletVec = new Vector();
mEnemyVec = new Vector();
mExplodeVec=new Vector();
Thread t = new Thread(this);
t.start();
}
public void handleKey() {
int key = getKeyStates();
if ((key & UP_PRESSED) != 0) {
mHero.moveto(HeroSprite.UP);
}
if ((key & DOWN_PRESSED) != 0) {
mHero.moveto(HeroSprite.DOWN);
}
if ((key & LEFT_PRESSED) != 0) {
mHero.moveto(HeroSprite.LEFT);
}
if ((key & RIGHT_PRESSED) != 0) {
mHero.moveto(HeroSprite.RIGHT);
}
if ((key & FIRE_PRESSED) != 0) {
Bullet b = mHero.fire();
mBulletVec.addElement(b);
mLm.insert(b, 0);
}
int x, y, herox, heroy;
herox = mHero.getX();
heroy = mHero.getY();
x = herox - getWidth() / 2;
y = heroy - getHeight() / 2;
if (x < 0)
x = 0;
else if (x > mLayer.getWidth() - getWidth())
x = mLayer.getWidth() - getWidth();
if (y < 0)
y = 0;
else if (y > mLayer.getHeight() - getHeight())
y = mLayer.getHeight() - getHeight();
mLm.setViewWindow(x, y, getWidth(), getHeight());
}
public void action() {
// 怪物处理
mCounter++;
if (mCounter % 20 == 5) {
TrialSprit mon = new TrialSprit(birdImg, 32, 48, 1);
mEnemyVec.addElement(mon);
mLm.insert(mon, 0);
}
for (int i = 0; i < mEnemyVec.size(); i++) {
TrialSprit m = (TrialSprit) mEnemyVec.elementAt(i);
m.stepMove();
}
// 子弹移动
for (int i = 0; i < mBulletVec.size(); i++) {
Bullet b = (Bullet) mBulletVec.elementAt(i);
b.action();
//检测与敌人的碰撞
for(int j=0;j<mEnemyVec.size();j++){
TrialSprit m=(TrialSprit)mEnemyVec.elementAt(j);
if(b.collidesWith(m, true)){
mEnemyVec.removeElementAt(j);
mBulletVec.removeElementAt(i);
mLm.remove(b);
mLm.remove(m);
Sprite explode=new Sprite(explodeImg,21,17);
explode.setPosition(m.getX(), m.getY());
mExplodeVec.addElement(explode);
mLm.insert(explode, 0);
//j--;
i--;
break;
}
}
if(b.getX()<0||b.getX()>mLayer.getWidth()||b.getY()<0||b.getY()>mLayer.getHeight()){
mBulletVec.removeElement(b);
mLm.remove(b);
}
}
//爆炸效果
for(int i=0;i<mExplodeVec.size();i++){
Sprite ex=(Sprite)mExplodeVec.elementAt(i);
ex.nextFrame();
System.out.println(ex.getFrame()+" "+ex.getRawFrameCount());
if(ex.getFrame()>=ex.getRawFrameCount()-1){
mExplodeVec.removeElementAt(i);
mLm.remove(ex);
i--;
}
}
// 判断英雄与图层碰撞
mD.setPosition(mHero.getX() + (mHero.getWidth() - mD.getWidth()) / 2,
mHero.getY() + (mHero.getHeight() - mD.getHeight()) / 2);
if (mD.collidesWith(mBoxLayer, false))
mHero.undo();
}
public void run() {
Graphics g = getGraphics();
while (true) {
handleKey();
action();
mLm.paint(g, 0, 0);
flushGraphics();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
byte mBoxMap[][] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 0, 0, 0, 0, 0},
{7, 7, 0, 0, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -