一、 马里奥碰到墙不能走,代码有BUG,大神们帮看看!
思路是马里奥每走一步,就判断与墙相不相交,若左走一步,相交,就像右走一步,(避免相交时黏住)若上走一步,相交,就向下走一步,其他同理,但是验证结果有BUG,无论上下左右碰到墙会停,但是贴着墙边框走,感觉会卡顿,还会振动,有时还会走太空步,就是你让他往右他却往左滑动,离开了墙就很顺畅,代码如下:
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.KeyEvent;
import com.rupeng.game.GameCore;
public class PengQiang implements Runnable {
@Override
public void run() {
GameCore.setGameSize(1000, 1000);//GameCore是如鹏网的游戏引擎
Dimension gameSize =GameCore.getGameSize();
Sprites mario=new Sprites("mario"); //创建马里奥
mario.setPosition(0, 0);
mario.PlayAnimate("walk");
Images[] jieLaDe=new Images[10];
for(int i=0;i<10;i++)//创建十张图片当墙
{
jieLaDe[i]=new Images("墙.jpg");
int a=jieLaDe[i].getSize().width;
int b=jieLaDe[i].getSize().height;
jieLaDe[i].setPosition(GameCore.rand(0, 1000-a),GameCore.rand(0, 1000-b) );
}
for(;;)
{
int keycode=GameCore.getPressedKeyCode();
Point marioPos=mario.getPosition();//获得马里奥当前位置
Dimension marioSize=mario.getSize();//获得马里奥大小
if (keycode==KeyEvent.VK_LEFT||keycode==KeyEvent.VK_A)
{
if(marioPos.x>0)
{
mario.moveLeft();
for(int i=0;i<10;i++)//开始判断十张照片是否与马里奥相交,余下同理
{
if(mario.isXiangJiao(jieLaDe[i]))//相交的判断已封装成方法直接调用
{
mario.moveRight();
}
}
}
}
if(keycode==KeyEvent.VK_RIGHT||keycode==KeyEvent.VK_D)
{
if(marioPos.x<gameSize.width-marioSize.width)
{
mario.moveRight();
for(int i=0;i<10;i++)
{
if(mario.isXiangJiao(jieLaDe[i]))
{
mario.moveLeft();
}
}
}
}
if(keycode==KeyEvent.VK_UP||keycode==KeyEvent.VK_W)
{
if(marioPos.y>0)
{
mario.moveUp();
for(int i=0;i<10;i++)
{
if(mario.isXiangJiao(jieLaDe[i]))
{
mario.moveDown();
}
}
}
}
if(keycode==KeyEvent.VK_DOWN||keycode==KeyEvent.VK_S)
{
if(marioPos.y<gameSize.height-marioSize.height-50)
{
mario.moveDown();
for(int i=0;i<10;i++)
{
if(mario.isXiangJiao(jieLaDe[i]))
{
mario.moveUp();
}
}
}
}
}
}
public static void main(String[] args) {
GameCore.start(new PengQiang());
}
}
实在是找不到BUG在哪,还是我这种思路不行?如果思路正确,哪个方向走一碰墙就后退一步,这样就与墙不相交了,只要不再往碰撞的方向走,都会很顺畅啊?