Processing 处理:精灵移动随机停止

Processing 处理:精灵移动随机停止,processing,Processing,我是处理新手,一直在修改别人的代码。除了为什么我的精灵总是随机停止之外,我完全理解这一切。我最终在似乎是随机的点上失去了所有的运动。有什么帮助吗 PImage-img; 精灵玩家; 墙[]墙; 无效设置(){ 大小(750750); img=loadImage(“sprite.png”); 玩家=新精灵(50300); 帧率(60); 光滑的(); 墙=新墙[3]; 墙[0]=新墙(250,0,40500); 墙[1]=新墙(500250,40500); 墙[2]=新墙(300200,40500

我是处理新手,一直在修改别人的代码。除了为什么我的精灵总是随机停止之外,我完全理解这一切。我最终在似乎是随机的点上失去了所有的运动。有什么帮助吗

PImage-img;
精灵玩家;
墙[]墙;
无效设置(){
大小(750750);
img=loadImage(“sprite.png”);
玩家=新精灵(50300);
帧率(60);
光滑的();
墙=新墙[3];
墙[0]=新墙(250,0,40500);
墙[1]=新墙(500250,40500);
墙[2]=新墙(300200,40500);
} 
作废提款(){
背景(255、255、255);
仰泳();
player.draw();
玩家。移动(墙壁);
对于(int i=0;iwalls[i].x&&possibleX<(walls[i].x+walls[i].w)&&possibleY>walls[i].y&&possibleY
问题在于您的
move()
函数:

void移动(墙[]墙){
...
布尔didclide=false;
对于(int i=0;iwalls[i].x&&possibleX<(walls[i].x+walls[i].w)&&……){
didclide=true;
}
}
if(didclide==false){
x=可能值;
y=可能;
}
}
你检查碰撞,在循环中,这很好!但是,您永远不会解决冲突(即,将人物精灵从墙中移开,使墙不再位于其可能的矩形内),因此人物无法再移动,因为每次调用此函数时,didclide仍然为true

下次可以通过添加以下代码对此进行测试:

if(didclide==false){
...
}否则{
println(“我停止了移动”);
//也可以将冲突解决代码放在这里
}
如果您在控制台中看到,则表示您撞到了墙

解决碰撞问题的方法是将精灵移动到离墙最近的边之间的距离,再加上一点距离,这样您就不会仍然接触到它,如下所示:

//如果精灵在墙的左边,也就是说,向右走得太远了。。。
float diff=walls[i].x-walls[i].w-this.x;
这个.x+=diff+1.0
...
//如果精灵在墙下面,而且本质上太高了。。。。
float diff=walls[i].y+wall[i].h-this.y;
这个.y+=diff+1.0

如果你把问题缩小到一个小范围,你会有更好的运气。请注意,这不应是整个草图。例如,您的问题与绘制图像无关,因此您不需要这样做。只需将其缩小到一个硬编码矩形与另一个硬编码矩形冲突。你试过你的代码吗?