Pygame // Столкновение на площади не работает хорошо - PullRequest
1 голос
/ 26 апреля 2020

так что проблема с моим столкновением в том, что когда я прыгаю на одном из своих квадратов, когда я прыгаю по центру, это хорошо, но когда я прыгаю на бок, это отталкивает меня назад ??? Есть ли способ исправить это так, что когда я прыгаю на своем квадрате, он не отбрасывает меня назад, он просто без проблем приземляется на квадрат? вот гифка https://gyazo.com/a5ee7bba49dc557a2a42b64808618d7b все хорошо, когда вы прыгаете на середину квадрата, но когда вы прыгаете на вершине квадрата, вас отталкивают, а на середине вы остаетесь там, мое столкновение находится внизу скрипта

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  

1 Ответ

2 голосов
/ 27 апреля 2020

line 77 в разделе "Enemy 2 Collision" добавить -Player.width

if Player.right > Enemy2.left and Player.left < Enemy2.left - Player.width:

Это исправлено только для первого блока (слева), если это поведение, которое вы хотите, то ваш код нужно несколько быстрых исправлений, и вы хороши для go. Также одно примечание: не используйте заглавные буквы для Player, Enemy, Enemy2, используйте все строчные буквы, потому что верхний регистр относится к имени Class.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...