代码是检测碰撞,碰撞发生以后不让继续前进,但是想后退或者其它方向也不知道怎么写代码移动,请前辈指点下,碰撞发生以后应该怎样写代码不让他向那个物体前进,然后可以从其它方向移动,谢谢,没什么分,请指教。
代码如下:
我的上下移动相反了,这不用提,如还有什么不好的地方也请指出来谢谢。
import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
public class SpriteGameCanvas extends GameCanvas implements Runnable{
private int curX;
private int curY;
private int maxX;
private int maxY;
private Graphics g;
private int frame[];
private Image img;
private Image img2;
private Sprite msprite;
private long deley;
private Sprite msprite2;
private int x;
private int y;
private boolean check;
protected SpriteGameCanvas(boolean suppressKeyEvents) {
super(suppressKeyEvents);
check = false;
deley = 500;
maxX = this.getWidth();
maxY = this.getHeight();
g = this.getGraphics();
try {
img =Image.createImage("/man.png");
img2 = Image.createImage("/love.png");
} catch (IOException e) {
System.out.println("image file");
e.printStackTrace();
}
msprite = new Sprite(img, 24, 32);
msprite2= new Sprite(img2,128,128);
frame = new int[4];
for(int i=0;i<frame.length;i++)
{
frame[i]=i;
}
curX = (maxX-msprite.getWidth())/2 + 20;
curY = (maxY-msprite.getHeight())/2;
msprite.setFrameSequence(frame);
msprite.setPosition(curX, curY);
msprite2.setFrame(0);
msprite2.setPosition(0, curY);
msprite2.paint(g);
msprite.paint(g);
this.flushGraphics();
}
public void run() {
while(true)
{
try {
Thread.sleep(deley);
} catch (InterruptedException e) {
System.out.println("sleep file");
e.printStackTrace();
}
input();
rend();
//msprite.nextFrame();
}
}
public void start()
{
Thread t = new Thread(this);
t.start();
}
public void input()
{
if(check!=true)
{
x = curX;
y = curY;
}
int keyState = this.getKeyStates();
if(((keyState & this.UP_PRESSED) !=0))
{
if(curY>0)
curY++;
}
if(((keyState & this.DOWN_PRESSED)!=0))
{
if(curY<(maxY-img.getHeight()))
{
curY--;
}else{
curY = maxY-img.getHeight();
}
}
if((keyState & this.LEFT_PRESSED)!=0)
{
if(curX>0)
curX--;
}
if((keyState&this.RIGHT_PRESSED)!=0)
{
if(curX<(maxX-img.getWidth()))
{
curX++;
}
}
}
public void rend()
{
if(!(check = msprite.collidesWith(msprite2, false)))
{
System.out.println( msprite.collidesWith(msprite2, false)+"curX: "+"curX: " +x+"curY: "+curY );
msprite.setPosition(curX, curY);
}else{
msprite.setPosition(x, y);
System.out.println(" x: " +x+" y :"+y );
}
msprite.paint(g);
this.flushGraphics();
System.out.println("check : " + msprite.collidesWith(msprite2, false));
}
}
代码如下:
我的上下移动相反了,这不用提,如还有什么不好的地方也请指出来谢谢。
import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
public class SpriteGameCanvas extends GameCanvas implements Runnable{
private int curX;
private int curY;
private int maxX;
private int maxY;
private Graphics g;
private int frame[];
private Image img;
private Image img2;
private Sprite msprite;
private long deley;
private Sprite msprite2;
private int x;
private int y;
private boolean check;
protected SpriteGameCanvas(boolean suppressKeyEvents) {
super(suppressKeyEvents);
check = false;
deley = 500;
maxX = this.getWidth();
maxY = this.getHeight();
g = this.getGraphics();
try {
img =Image.createImage("/man.png");
img2 = Image.createImage("/love.png");
} catch (IOException e) {
System.out.println("image file");
e.printStackTrace();
}
msprite = new Sprite(img, 24, 32);
msprite2= new Sprite(img2,128,128);
frame = new int[4];
for(int i=0;i<frame.length;i++)
{
frame[i]=i;
}
curX = (maxX-msprite.getWidth())/2 + 20;
curY = (maxY-msprite.getHeight())/2;
msprite.setFrameSequence(frame);
msprite.setPosition(curX, curY);
msprite2.setFrame(0);
msprite2.setPosition(0, curY);
msprite2.paint(g);
msprite.paint(g);
this.flushGraphics();
}
public void run() {
while(true)
{
try {
Thread.sleep(deley);
} catch (InterruptedException e) {
System.out.println("sleep file");
e.printStackTrace();
}
input();
rend();
//msprite.nextFrame();
}
}
public void start()
{
Thread t = new Thread(this);
t.start();
}
public void input()
{
if(check!=true)
{
x = curX;
y = curY;
}
int keyState = this.getKeyStates();
if(((keyState & this.UP_PRESSED) !=0))
{
if(curY>0)
curY++;
}
if(((keyState & this.DOWN_PRESSED)!=0))
{
if(curY<(maxY-img.getHeight()))
{
curY--;
}else{
curY = maxY-img.getHeight();
}
}
if((keyState & this.LEFT_PRESSED)!=0)
{
if(curX>0)
curX--;
}
if((keyState&this.RIGHT_PRESSED)!=0)
{
if(curX<(maxX-img.getWidth()))
{
curX++;
}
}
}
public void rend()
{
if(!(check = msprite.collidesWith(msprite2, false)))
{
System.out.println( msprite.collidesWith(msprite2, false)+"curX: "+"curX: " +x+"curY: "+curY );
msprite.setPosition(curX, curY);
}else{
msprite.setPosition(x, y);
System.out.println(" x: " +x+" y :"+y );
}
msprite.paint(g);
this.flushGraphics();
System.out.println("check : " + msprite.collidesWith(msprite2, false));
}
}