Python Pygame//在正方形上碰撞不正常
所以我碰撞的问题是,当我在一个方块上跳的时候,当我在中间跳的时候,它是好的,但是当我在侧面跳的时候,它会把我向后推???有没有办法解决这个问题,这样当我跳到我的方块上时,它不会把我推回,它会毫无问题地落在方块上?这是一张gif照片 当你跳到正方形的中间时,一切都很好,但是当你跳到正方形边的顶部时,你会被推回,但是在中间你会呆在那里,我的碰撞位于脚本的底部Python Pygame//在正方形上碰撞不正常,python,pygame,Python,Pygame,所以我碰撞的问题是,当我在一个方块上跳的时候,当我在中间跳的时候,它是好的,但是当我在侧面跳的时候,它会把我向后推???有没有办法解决这个问题,这样当我跳到我的方块上时,它不会把我推回,它会毫无问题地落在方块上?这是一张gif照片 当你跳到正方形的中间时,一切都很好,但是当你跳到正方形边的顶部时,你会被推回,但是在中间你会呆在那里,我的碰撞位于脚本的底部 import pygame pygame.init() window = pygame.display.set_mode((500,500
import pygame
pygame.init()
window = pygame.display.set_mode((500,500))
pygame.display.set_caption("for test")
# player1
x = 50
y = 340
height = 50
width = 50
isJump = False
jumpCount = 10
speed = 5
fall = 0
#----------------------
# Square2
xcord = 390
ycord = 320
heights = 60
widths = 60
#-----------------------
# Square2
cordx = 300
cordy = 390
hts = 60
wts = 60
#-----------------------
#FPS
FPS = 60
clock = pygame.time.Clock()
#--------------------
# main Loop
runninggame = True
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runninggame = False
window.fill((0,0,0))
Player = pygame.draw.rect(window, (105, 0, 105), (x,y,height,width))
Enemy = pygame.draw.rect(window, (255, 0, 255), (xcord,ycord,heights,widths))
Enemy2 = pygame.draw.rect(window, (155, 155, 155), (cordx,cordy,hts,wts))
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= speed
if keys[pygame.K_RIGHT]:
x += speed
if not isJump:
y += fall
fall += 1
# ----------------------------------------------------- # enem1 collisio
# both of my 2 enemy squares collisions push me back when ever I Jump on the top of them on there sides but when I jump on the middle of of both of them it seems to work if I just want it so when I jump on both of my squares I just don't get pushed back
Player.topleft = (x, y)
collide = False
if Player.colliderect(Enemy):
collide = True
y = Enemy.top - Player.height
if Player.right > Enemy.left and Player.left < Enemy.left:
x = Enemy.left - Player.width
if Player.left < Enemy.right and Player.right > Enemy.right:
x = Enemy.right
#------------------------------------------- Enemy 2 Colision
if Player.colliderect(Enemy2):
collide = True
y = Enemy2.top - Player.height
if Player.right > Enemy2.left and Player.left < Enemy2.left:
x = Enemy2.left - Player.width
if Player.left < Enemy2.right and Player.right > Enemy2.right:
x = Enemy2.right
if Player.bottom >= 500:
collide = True
y = 500 - Player.height
if collide:
if keys[pygame.K_SPACE]:
isJump = True
fall = 0
#------------------------------------------------------------------------
else:
if jumpCount > 0:
y -= (jumpCount * abs(jumpCount)) * 0.5
jumpCount -= 1
else:
jumpCount = 10
isJump = False
pygame.display.update()
pygame.quit
导入pygame
pygame.init()
window=pygame.display.set_模式((500500))
pygame.display.set_标题(“用于测试”)
#玩家1
x=50
y=340
高度=50
宽度=50
isJump=False
跳数=10
速度=5
下降=0
#----------------------
#平方2
xcord=390
ycord=320
高度=60
宽度=60
#-----------------------
#平方2
cordx=300
科迪=390
hts=60
wts=60
#-----------------------
#FPS
FPS=60
clock=pygame.time.clock()
#--------------------
#主回路
runninggame=True
运行游戏时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
runninggame=错误
窗口填充((0,0,0))
Player=pygame.draw.rect(窗口,(105,0,105),(x,y,高度,宽度))
敌方=pygame.draw.rect(窗口,(255,0,255),(xcord,ycord,高度,宽度))
Enemy2=pygame.draw.rect(窗口,(155155155),(cordx,cordy,hts,wts))
keys=pygame.key.get_pressed()
如果键[pygame.K_左]:
x-=速度
如果键[pygame.K_RIGHT]:
x+=速度
如果不是,请跳转:
y+=下降
下降+=1
#----------------------------------------------------------------enem1 collisio
#我的两个敌人方格的碰撞都会将我推回,当我跳到两个方格的上方时,但当我跳到两个方格的中间时,如果我想要的话,它似乎会起作用,所以当我跳到两个方格时,我不会被推回
Player.topleft=(x,y)
碰撞=错误
如果玩家.collide rect(敌人):
碰撞=真
y=敌人。顶级球员。身高
如果Player.right>敌方.left和Player.left<敌方.left:
x=敌方。左侧-玩家。宽度
如果Player.left<敌方.right和Player.right>敌方.right:
x=敌人。对
#-------------------------------------------敌人2战斗群
如果Player.collide rect(Enemy2):
碰撞=真
y=Enemy2.top-Player.height
如果Player.right>Enemy2.left和Player.leftEnemy2.right:
x=灌肠2.对
如果Player.bottom>=500:
碰撞=真
y=500-运动员身高
如果发生碰撞:
如果键[pygame.K_SPACE]:
isJump=True
下降=0
#------------------------------------------------------------------------
其他:
如果jumpCount>0:
y-=(跳数*绝对值(跳数))*0.5
跳转计数-=1
其他:
跳数=10
isJump=False
pygame.display.update()
pygame.退出
第77行
在“敌方2号碰撞”下添加-Player.width
if Player.right > Enemy2.left and Player.left < Enemy2.left - Player.width:
if Player.right>Enemy2.left和Player.left
它只针对第一个块(在其左侧)进行修复,如果这是您想要的行为,那么您的代码需要一些快速修复,您就可以开始了。
还有一点需要注意的是,不要对
玩家
、敌人
、Enemy2
使用大写字母,因为大写字母表示一个类
名称 也谢谢,如果我想在右边添加它呢?我试过了-player.height似乎不起作用如果player.left,没问题,很高兴我能帮忙。