我试图让我的玩家rect与我的敌人rect在侧面和底部发生碰撞,因此玩家rect不会去扔敌人的rect,但是我不确定为什么它会不断地传送我,使其完全无法工作VIDEo <<在视频中看到任何帮助,我都需要帮助,当我在侧面碰撞时,不要摔或爬
我的碰撞部分
playerman.isJump = False
collide = False
for platform in platforms:
if playerman.rect.colliderect(platform.rect):
collide = True
playerman.isJump = False
playerman.y = platform.rect.top - playerman.height + 1
if playerman.rect.right > platform.rect.left and playerman.rect.left < platform.rect.left - playerman.width:
playerman.x = platform.rect.left - playerman.width
if playerman.rect.left < platform.rect.right and playerman.rect.right > platform.rect.right + playerman.width:
playerman.x = platform.rect.right
没有图像,只有正方形,您可以测试代码
import pygame,random
window = pygame.display.set_mode((800,800), pygame.NOFRAME)
# player factory
class player:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.speed = 4
self.fall = 0
self.isJump = False
self.jumpCount = 10
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# player factory
class platform:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
white = (255,255,255)
platform1 = platform(590,590,60,60,white)
platforms = [platform1]
# make the player
pink = (205,105,205)
playerman = player(300,300,60,60,pink)
# the game fps
clock = pygame.time.Clock()
FPS = 30
def keyevents():
if keys[pygame.K_w]:
playerman.y -= playerman.speed
if keys[pygame.K_s]:
playerman.y += playerman.speed
if keys[pygame.K_d]:
playerman.x += playerman.speed
if keys[pygame.K_a]:
playerman.x -= playerman.speed
if keys[pygame.K_SPACE]:
playerman.isJump = True
def jump():
if playerman.isJump:
if playerman.jumpCount >= -10:
neg = 1
if playerman.jumpCount < 0:
neg = -1
playerman.y -= playerman.jumpCount**2 * 0.5 * neg
playerman.jumpCount -= 1
else:
playerman.isJump = False
playerman.jumpCount = 10
collide = False # this makes the player fall down up to
# move the player
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
playerman.isJump = False
if playerman.rect.bottom >= 680:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 680 - playerman.height
if collide:
if keys[pygame.K_SPACE]:
playerman.isJump = True
playerman.fall = 0
# redraw the window
def redraw():
playerman.draw()
platform.draw()
# main loop
runninggame = True
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runningggame = False
# key event
keys = pygame.key.get_pressed()
# this is the key events
keyevents()
jump() # JUMP AND COLLISION on the grawn
playerman.isJump = False
collide = False
for platform in platforms:
if playerman.rect.colliderect(platform.rect):
collide = True
playerman.isJump = False
playerman.y = platform.rect.top - playerman.height + 1
if playerman.rect.right > platform.rect.left and playerman.rect.left < platform.rect.left - playerman.width:
playerman.x = platform.rect.left - playerman.width
if playerman.rect.left < platform.rect.right and playerman.rect.right > platform.rect.right + playerman.width:
playerman.x = platform.rect.right
window.fill((0,0,0))
redraw()
pygame.display.update()
pygame.quit()
我只是在寻找基本的碰撞方式,我左右左右分别触碰敌人,不会摔到底部,如果我在顶部发生碰撞,它会让我的玩家站在上面
我终于成功地提出了解决方案!这里有一些代码可以使一切正常工作。如果您愿意,我可以在聊天中向您描述我所做的更改及其所做的事情。请注意,我是在Python 3中编写的,因此您可能需要进行一些更改才能使其在Python 2中运行。
import pygame,random
window = pygame.display.set_mode((800,800), pygame.NOFRAME)
# player factory
class player:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.moveleft = True
self.moveright = True
self.color = color
self.speed = 4
self.fall = 0
self.isJump = False
self.jumpCount = 10
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# player factory
class platform:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
white = (255,255,255)
platform1 = platform(590,590,60,60,white)
platforms = [platform1]
# make the player
pink = (205,105,205)
playerman = player(300,300,60,60,pink)
# the game fps
clock = pygame.time.Clock()
FPS = 30
def keyevents():
if keys[pygame.K_w]:
playerman.y -= playerman.speed
if keys[pygame.K_s]:
playerman.y += playerman.speed
if keys[pygame.K_d]:
if playerman.moveright:
playerman.x += playerman.speed
if keys[pygame.K_a]:
if playerman.moveleft:
playerman.x -= playerman.speed
if keys[pygame.K_SPACE]:
playerman.isJump = True
def jump():
if playerman.isJump:
if playerman.jumpCount >= -10:
neg = 1
if playerman.jumpCount < 0:
neg = -1
playerman.y -= playerman.jumpCount**2 * 0.5 * neg
playerman.jumpCount -= 1
else:
playerman.isJump = False
playerman.jumpCount = 10
collide = False # this makes the player fall down up to
# move the player
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
playerman.isJump = False
if playerman.rect.bottom >= 680:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 680 - playerman.height
if collide:
if keys[pygame.K_SPACE]:
playerman.isJump = True
playerman.fall = 0
# redraw the window
def redraw():
playerman.draw()
platform.draw()
# main loop
runninggame = True
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runningggame = False
# key event
keys = pygame.key.get_pressed()
# this is the key events
keyevents()
jump() # JUMP AND COLLISION on the grawn
playerman.isJump = False
collide = False
for platform in platforms:
if playerman.rect.colliderect(platform.rect):
collide = True
playerman.isJump = False
if (platform.rect.collidepoint(playerman.rect.right, playerman.rect.bottom) or
platform.rect.collidepoint(playerman.rect.left, playerman.rect.bottom)):
playerman.y = platform.rect.top - playerman.height + 1
playerman.moveright = True
playerman.moveleft = True
if (platform.rect.collidepoint(playerman.rect.right, playerman.rect.top) or
platform.rect.collidepoint(playerman.rect.right, playerman.rect.bottom - 10)):
playerman.moveright = False
elif (platform.rect.collidepoint(playerman.rect.left, playerman.rect.top) or
platform.rect.collidepoint(playerman.rect.left, playerman.rect.bottom - 10)):
playerman.moveleft = False
else:
playerman.moveright = True
playerman.moveleft = True
window.fill((0,0,0))
redraw()
pygame.display.update()
pygame.quit()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句