Methods 方法在屏幕上包含矩形,但该方法不起作用

Methods 方法在屏幕上包含矩形,但该方法不起作用,methods,processing,Methods,Processing,我正在尝试制作一个正在处理的游戏,并且已经制作了一个方法来保持屏幕上的矩形-将其包含在窗口中 方法是batOnScreen() 我看不出该方法的数学问题或该方法的实施问题。我试着用球棒的一半高度来接触屏幕的顶部或底部,并阻止球棒移动 当我按下并松开“w”或“s”键时,蝙蝠将停止移动,但当我一直按下按钮时,蝙蝠可以离开屏幕。当鼠标控制蝙蝠时,我的方法工作正常 多谢各位 浮动x,y,w,h; 浮动速度x,快速; 漂浮蝙蝠,蝙蝠; int蝙蝠宽度、沐浴光、蝙蝠速度; 布尔北,南; 无效设置(){ 大小

我正在尝试制作一个正在处理的游戏,并且已经制作了一个方法来保持屏幕上的矩形-将其包含在窗口中

方法是batOnScreen()

我看不出该方法的数学问题或该方法的实施问题。我试着用球棒的一半高度来接触屏幕的顶部或底部,并阻止球棒移动

当我按下并松开“w”或“s”键时,蝙蝠将停止移动,但当我一直按下按钮时,蝙蝠可以离开屏幕。当鼠标控制蝙蝠时,我的方法工作正常

多谢各位

浮动x,y,w,h;
浮动速度x,快速;
漂浮蝙蝠,蝙蝠;
int蝙蝠宽度、沐浴光、蝙蝠速度;
布尔北,南;
无效设置(){
大小(500500);
x=宽度/2;
y=高度/2;
w=50;
h=50;
speedX=2;//音乐速度?
速度=4;
batX=30;//位置
batY=高度/2;
蝙蝠宽度=25;//蝙蝠大小
光=100;
蝙蝠速度=5;
rectMode(中间);//从中间画蝙蝠
}
作废提款(){
背景(0);//删除轨迹
抽屉();
蹦蹦跳跳();
边角();
退税();
moveBat();
蝙蝠屏幕();
}
//方法
无效退税(){
填充(255、255、255);
rect(batX、batY、batWidth、batHeight);
}
void moveBat(){//bat控件
如果(北=真){
蝙蝠=蝙蝠-蝙蝠速度;
}
如果(南=真){
蝙蝠=蝙蝠+蝙蝠速度;
}
}
void-baton-screen(){
如果(batY-BATHERIGHT/2<0){
蝙蝠=蝙蝠+蝙蝠速度;
}
如果(蝙蝠+沐浴灯/2>高度){
蝙蝠=蝙蝠-蝙蝠速度;
}
}
空抽屉(){
填充(0,255,0);
椭圆(x,y,w,h);//小于50的圆
}
void bounceEllipse(){
x=x+speedX;//移动球x
y=y+speedY;//移动球y
}
无效边角(){
//if(x>width)//绑定重叠
如果(x>宽度-w/2){
speedX=-speedX;
}否则如果(x<0+w/2){
speedX=-speedX;
}
如果(y>高度-h/2){
迅捷=-迅捷;
}否则如果(y<0+h/2){
迅捷=-迅捷;
}
}
//蝙蝠控制
按下void键(){
如果(键=='w'| |键=='w'){
batY=batY-30;
}else if(key='s'| | key='s'){
batY=batY+30;
}
}
void keyReleased(){
如果(键=='w'| |键=='w'){
北=假;
}
如果(键=='s'| |键=='s'){
南=假;
}
}
//蝙蝠控制鼠标
void mouseMoved(){
蝙蝠=老鼠;
keyPressed()
函数中,无论发生什么,您都会移动矩形。您从不检查位置以确保它保持在屏幕上

你有一大堆不同的函数来移动和检查矩形的位置。我的建议是去掉它们,把你的逻辑整合到一个地方

您可能希望使用
north
south
变量来跟踪正在按下的键,如中所述。(请参阅处理多个键部分。)

另外,请注意,这可能不是您想要做的:

 if (north = true) {
   batY = batY - batSpeed;
 }
 if (south = true) {
   batY = batY + batSpeed;
 }
如果语句没有执行您认为它们正在执行的操作,则会出现此问题。由于您只使用了一个=等号,因此您正在分配这些值。您可能需要检查等号:

 if (north == true) {
   batY = batY - batSpeed;
 }
 if (south == true) {
   batY = batY + batSpeed;
 }
由于这些是
布尔值
值,您可以直接使用它们:

 if (north) {
   batY = batY - batSpeed;
 }
 if (south) {
   batY = batY + batSpeed;
 }