Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame//在正方形上碰撞不正常_Python_Pygame - Fatal编程技术网

Python Pygame//在正方形上碰撞不正常

Python Pygame//在正方形上碰撞不正常,python,pygame,Python,Pygame,所以我碰撞的问题是,当我在一个方块上跳的时候,当我在中间跳的时候,它是好的,但是当我在侧面跳的时候,它会把我向后推???有没有办法解决这个问题,这样当我跳到我的方块上时,它不会把我推回,它会毫无问题地落在方块上?这是一张gif照片 当你跳到正方形的中间时,一切都很好,但是当你跳到正方形边的顶部时,你会被推回,但是在中间你会呆在那里,我的碰撞位于脚本的底部 import pygame pygame.init() window = pygame.display.set_mode((500,500

所以我碰撞的问题是,当我在一个方块上跳的时候,当我在中间跳的时候,它是好的,但是当我在侧面跳的时候,它会把我向后推???有没有办法解决这个问题,这样当我跳到我的方块上时,它不会把我推回,它会毫无问题地落在方块上?这是一张gif照片 当你跳到正方形的中间时,一切都很好,但是当你跳到正方形边的顶部时,你会被推回,但是在中间你会呆在那里,我的碰撞位于脚本的底部

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.leftEnemy2.right+player.width,你应该放+player.width
,没问题,很高兴我能帮忙。