j2me碰撞检测问题,请前辈指教

代码是检测碰撞,碰撞发生以后不让继续前进,但是想后退或者其它方向也不知道怎么写代码移动,请前辈指点下,碰撞发生以后应该怎样写代码不让他向那个物体前进,然后可以从其它方向移动,谢谢,没什么分,请指教。

代码如下:
我的上下移动相反了,这不用提,如还有什么不好的地方也请指出来谢谢。

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));
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值