📄 collidetest2.java~1~
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
public class CollideTest2 extends MIDlet{
Display display;
MyCanvas myCanvas;
public CollideTest2(){
display = Display.getDisplay(this);
myCanvas = new MyCanvas();
}
public void startApp(){
display.setCurrent(myCanvas);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
class MyCanvas extends Canvas implements CommandListener{
Command exitCmd;
Image offScreen;
Image mySpriteImage;
Sprite[] mySprite = new Sprite[2];
Timer timer;
public MyCanvas(){
timer = new Timer();
if(!isDoubleBuffered()){
offScreen = Image.createImage(getWidth(), getHeight());
}
try{
mySpriteImage = Image.createImage("/mysprite.png");
}
catch(Exception ex){}
for(int i=0;i<mySprite.length;i++){
mySprite[i] = new Sprite(this, mySpriteImage);
}
exitCmd = new Command("瞒秨", Command.EXIT, 1);
addCommand(exitCmd);
setCommandListener(this);
}
public void paint(Graphics g){
Graphics old = g;
boolean collide = false;
if(offScreen != null){
g = offScreen.getGraphics();
}
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
for(int i=0;i<mySprite.length;i++){
mySprite[i].draw(g);
}
if(g != old){
old.drawImage(offScreen, 0, 0, Graphics.LEFT|Graphics.TOP);
}
}
public void showNotify(){
super.showNotify();
timer.schedule(new CollideCheck(this), 0, 200);
}
public void hideNotify(){
timer.cancel();
}
public void keyPressed(int keyCode){
int gameAction = getGameAction(keyCode);
switch(gameAction){
case Canvas.UP:
mySprite[0].y-=1;
repaint();
break;
case Canvas.DOWN:
mySprite[0].y+=1;
repaint();
break;
case Canvas.LEFT:
mySprite[0].x-=1;
repaint();
break;
case Canvas.RIGHT:
mySprite[0].x+=1;
repaint();
break;
}
}
public void keyReleased(int keyCode){
}
public void keyRepeated(int keyCode){
}
public void commandAction(Command c, Displayable d){
if(c == exitCmd){
destroyApp(true);
notifyDestroyed();
}
}
}
class Sprite{
int x, y;
int width, height;
Image image;
MyCanvas canvas;
Random random = new Random();
boolean collide = false;
int[][] range = {{2, 7, 4, 14},
{6, 1, 20, 26},
{8, 28, 25, 7}};
public Sprite(MyCanvas canvas,Image image){
this.canvas = canvas;
x = Math.abs(random.nextInt())%canvas.getWidth();
y = Math.abs(random.nextInt())%canvas.getHeight();
this.image = image;
width = image.getWidth();
height = image.getHeight();
}
public boolean isCollided(Sprite other){
for(int i=0;i<range.length;i++){
int x1 = range[i][0];
int y1 = range[i][1];
int w1 = range[i][2];
int h1 = range[i][3];
for(int j=0;j<other.range.length;j++){
int x2 = other.range[j][0];
int y2 = other.range[j][1];
int w2 = other.range[j][2];
int h2 = other.range[j][3];
if((((x+x1+w1)>=other.x+x2&&(x+x1<=other.x+x2)) ||
(x+x1<=(other.x+x2+w2) && x+x1>=other.x+x2))&&
(((y+y1+h1)>=other.y+y2&&(y+y1<=other.y+y2)) ||
(y+y1<=(other.y+y2+h2) && y+y1>=other.y+y2))){
return true;
}
}
}
return false;
}
public void draw(Graphics g){
g.drawImage(image, x, y, Graphics.LEFT|Graphics.TOP);
g.setColor(0);
for(int i=0;i<range.length;i++)
g.drawRect(x+range[i][0], y+range[i][1], range[i][2], range[i][3]);
if(collide){
g.setColor(0xff0000);
g.drawLine(x, y, x+width, y+height);
g.drawLine(x+width, y, x, y+height);
collide = false;
}
}
}
class CollideCheck extends TimerTask{
MyCanvas canvas;
public CollideCheck(MyCanvas canvas){
this.canvas = canvas;
}
public void run(){
for(int i=0;i<canvas.mySprite.length;i++){
for(int j=0;j<canvas.mySprite.length;j++){
if(i != j){
canvas.mySprite[i].collide =
canvas.mySprite[i].isCollided(canvas.mySprite[j]);
if(canvas.mySprite[i].collide) break;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -