Python Pygame-如何阻止图像离开屏幕边缘?

Python Pygame-如何阻止图像离开屏幕边缘?,python,pygame,2d,collision,detection,Python,Pygame,2d,Collision,Detection,当鼠标悬停在窗口边缘时,jetfighterx的一部分会离开屏幕,这会导致狼蛛在重新爬到窗口顶部时不时爆炸,我如何阻止这种情况发生(不使用类) 代码: 导入pygame、sys、pygame.mixer 从pygame.locals导入* 随机输入 pygame.init() bif=“space.jpg” jf=“spacefightersprite.png” 敌方=“狼蛛太空战斗机.png” 激光=pygame.mixer.Sound(“LaserBlast.wav”) explosions

当鼠标悬停在窗口边缘时,jetfighterx的一部分会离开屏幕,这会导致狼蛛在重新爬到窗口顶部时不时爆炸,我如何阻止这种情况发生(不使用类)

代码:

导入pygame、sys、pygame.mixer
从pygame.locals导入*
随机输入
pygame.init()
bif=“space.jpg”
jf=“spacefightersprite.png”
敌方=“狼蛛太空战斗机.png”
激光=pygame.mixer.Sound(“LaserBlast.wav”)
explosionsound=pygame.mixer.Sound(“Explosion.wav”)
screen=pygame.display.set_模式((1000900),0,32)
caption=pygame.display.set_标题(“喷气式战斗机X”)
background=pygame.image.load(bif.convert())
jetfighterx=pygame.image.load(jf)
jetfighterx=pygame.transform.scale(jetfighterx,(400400))
狼蛛=pygame.image.load(敌人)
狼蛛=pygame.transform.scale(狼蛛,(100100))
laserblast=pygame.image.load(“C:\Python27\laser.png”)
explosion=pygame.image.load(“C:\Python27\explosion.png”)
爆炸=pygame.transform.scale(爆炸,(150150))
ex,ey=450,0
movex,movey=0,0
clock=pygame.time.clock()
速度=300
射击y=0
激光点火=错误
冲突=错误
活着=真
爆炸计时器=25
尽管如此:
pygame.mouse.set_可见(False)
mx,my=pygame.mouse.get_pos()
jetfighterx_rect=jetfighterx.get_rect(中心=(mx,我的))
喷气式战斗机=喷气式战斗机充气(-200,-200)
狼蛛=狼蛛。获取(中心=(例如,ey))
狼蛛=狼蛛膨胀(-180,-200)
#检查播放器输入
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
如果event.type==KEYDOWN:
如果event.key==K_转义或event.key==K_q:
sys.exit()
如果event.type==MOUSEBUTTONDOWN:
激光点火=正确
激光播放
射击y=my-200
发射x=mx-16
#更新游戏
milli=时钟滴答声()
秒=毫/1000。
dmy=秒*速度
ey+=dmy
如果ey>900:
爆炸计时器=25
冲突=错误
活着=真
ey=0
ex=随机随机随机数(50900)
如果激光点火:
射门y-=10
如果拍摄时间<0:
激光点火=错误
其他:
laserblast\u rect=laserblast.get\u rect(中心=(拍摄x,拍摄y))
如果laserblast_rect.Collide rect(狼蛛_rect):
爆炸声。播放()
碰撞=真
活动=错误
如果jetfighterx_rect.Collide rect(狼蛛_rect)和alive:
爆炸声。播放()
碰撞=真
活动=错误
#在屏幕上画画
屏幕光点(背景,(0,0))
屏幕blit(jetfighterx,(mx-200,my-200))
如果没有碰撞:
屏幕。布利特(狼蛛,(前,后))
elif碰撞:
爆炸计时器-=2
如果爆炸计时器>0且活动==假:
筛网布利特(爆炸,(ex,ey-50))
如果激光点火:
屏幕。blit(激光切割,(拍摄x,拍摄y))
pygame.display.update()

只需添加一个限制,不允许战斗机在边界x像素范围内移动

假设战斗机中心的x,y坐标为jetfighter_x,jetfighter_y(您需要将变量名称更改为代码中的任何名称),然后编写如下代码:

LBuffer = 16
RBuffer = 1000 - 16
TBuffer = 900 - 16
BBuffer = 16

if jetfighter_x > RBuffer:
    jetfighter_x = RBuffer

if jetfighter_x < LBuffer:
    jetfighter_x = LBuffer

if jetfighter_y > TBuffer:
    jetfighter_y = TBuffer

if jetfighter_y < BBuffer:
    jetfighter_y = BBuffer
LBuffer=16
RBuffer=1000-16
TBuffer=900-16
b缓冲=16
如果jetfighter_x>RBuffer:
喷气式战斗机
如果jetfighter_xTBuffer:
喷气式飞机
如果jetfighter_y
这将防止船舶中心距离边缘的距离小于16像素。显然,你需要调整它以适应你的飞船的大小。(侧面的缓冲区为图像的宽度/2。顶部和底部的缓冲区分别为图像的高度/2)

LBuffer = 16
RBuffer = 1000 - 16
TBuffer = 900 - 16
BBuffer = 16

if jetfighter_x > RBuffer:
    jetfighter_x = RBuffer

if jetfighter_x < LBuffer:
    jetfighter_x = LBuffer

if jetfighter_y > TBuffer:
    jetfighter_y = TBuffer

if jetfighter_y < BBuffer:
    jetfighter_y = BBuffer