Processing 处理中的突破(游戏)

Processing 处理中的突破(游戏),processing,Processing,所以,我正在用processing(编程语言)创建一个游戏breakout,但还不能完全找到一个函数来检查与蝙蝠的碰撞 到目前为止,我写的关于球棒碰撞的部分只会将球与球座碰撞,并将球返回到相反的方向。就目前而言,这场比赛是一个永无止境的现象,球只是与墙壁相撞。我想做的是,把球撞到球棒上 哦,这是我的家庭作业,所以请给我指出正确的方向,而不是替我做 代码如下: //基本突破游戏 //来自Matthre Yee King的代码 //砖块位置 浮砖; 浮砖; //砖宽和砖高 浮砖; 浮子砖千瓦; //

所以,我正在用processing(编程语言)创建一个游戏breakout,但还不能完全找到一个函数来检查与蝙蝠的碰撞

到目前为止,我写的关于球棒碰撞的部分只会将球与球座碰撞,并将球返回到相反的方向。就目前而言,这场比赛是一个永无止境的现象,球只是与墙壁相撞。我想做的是,把球撞到球棒上

哦,这是我的家庭作业,所以请给我指出正确的方向,而不是替我做

代码如下:

//基本突破游戏
//来自Matthre Yee King的代码
//砖块位置
浮砖;
浮砖;
//砖宽和砖高
浮砖;
浮子砖千瓦;
//球位
浮球;
浮球;
//球径
浮球;
//球的方向
浮球;
浮球;
//击球姿势
漂浮蝙蝠;
//球拍宽度
漂浮蝙蝠;
浮浴;
//蝙蝠色
浮动batB;
无效设置(){
尺寸(500500,P2D);
//设置游戏项目的大小
brickW=100;
brickH=50;
batW=100;
巴斯=25;
ballD=25;
batB=255;
//随机砖位
砖X=随机(0,宽度-砖千瓦);
砌砖=随机(0,高度/2);
//中锋击球
batX=(宽度/2)-(batW/2);
//球棒上的球
ballX=batX+(batW/2);
巴利=高度-浴缸-(巴利/2);
//球的运动
ballDx=随机(-5,5);
ballDy=-5;
矩形模式(拐角);
ellipseMode(中心);
}
作废提款(){
//检查有无碰撞
//有球棒的顶部或侧面
选中BallaGainstBat();
//检查有无球与车轮碰撞
//左右墙和顶墙
//和弹跳
选中BallaGainstWalls();
//把球靠在砖块上
选中BallaGainstBrick();
//移动球
ballX+=ballDx;
ballY+=ballDy;
背景(0);
//抽签
填充(0,255,0);
rect(batX,高度-浴缸,batW,浴缸);
//画砖头
填充(0,0,batB);
batB=(batB+10)%255;
rect(brickX、brickY、brickkw、brickH);
//抽签
填充(255,0,0);
椭圆(ballX,ballY,ballD,ballD);
如果(keyCode==37){//左光标键
batX-=10;
//把它放在屏幕上
if(batX<0){
batX=0;
}
}
如果(键代码==39){
batX+=10;
如果(batX>(宽度-batW)){
batX=宽度-batW;
}
}
}
//当他们松开钥匙时,重置钥匙代码
void keyReleased(){
keyCode=-1;
}
//此功能检查球是否击中球棒的顶部或侧面,以及
//根据需要更新其方向,以便球从球棒上反弹
无效检查BallaGainstBat(){
如果(球+球>高度-浴缸){
ballDy*=-1;
}
}
//此函数用于检查球是否击中砖块。它应该反弹回来
//如果是,则返回true
布尔checkBallAgainstBrick(){
返回false;
}
//此功能检查球是否击中顶部、左侧或右侧
//墙和更新其
//适当的方向,使球从墙上反弹
无效检查BallaGainstWalls(){
如果(球X+球D>宽度){
ballDx*=-1;
}
如果(ballX-ballD<0){
ballDx*=-1;
}
if(ballY-ballD<0){
ballDy*=-1;
}
}

由于断球时球棒的宽度是固定的,因此碰撞检测非常简单(使用伪代码):

if(下边缘(球)>上边缘(球拍)){
//球已进入可能发生碰撞的区域
如果((左_边(球)=左_边(球拍))){
//球在球棒的水平范围内,因此是“击球”
…计算挠度。。。
}否则{
//哎呀,球越过了球棒,没有被击中
划掉;
}否则{
//球还在球棒上方的某个地方,什么都不要做
}

中文:如果球的下边缘超过了球棒的上边缘,我们可能会发生碰撞。这只是检查场地的垂直轴。然后检查球的左边缘或右边缘是否落在球棒的水平位置内。如果球的任何一侧都没有与球棒重叠,那么你就输了。其他rwise您已经碰撞并进行碰撞检测。

谢谢,让我实施您的提示,如果有效,我将接受您的回答。谢谢您的回复。
if (lower_edge(ball) > top_edge(bat)) { 
   // the ball has entered territory where it might have collided
   if ((left_edge(ball) <= right_edge(bat)) && (right_edge(ball) >= left_edge(bat))) {
      // the ball's within the horizontal bounds of the bat, so it's a "hit"
      ... calculate deflection ...
   } else {
      // oops, ball's gone past the bat and wasn't hit
      strike_out();
} else {
  // ball's still above the bat somewhere. do nothing
}