我尝试了许多不同的方法,但似乎无法使碰撞检测正常工作

时间:2018-11-05 01:20:13

标签: python-2.7 pygame

这是我的代码。我宁愿不要使用精灵来检测碰撞。我正在尝试制作一个涂鸦跳跃版本,其中我的角色在平台上弹跳。谢谢!

# #

import pygame
import random
from random import randint
pygame.init()
WINDOW_HEIGHT = 700
WINDOW_WIDTH = 400
PLATFORM_WIDTH = 75
PLATFORM_HEIGHT = 25
player_height = 75
player_width  = 50
x5 = 200
y5 = 620
class Platform(object):
    def __init__(self):
        self.x = 0
        self.y = 0
        self.change_x = 0
def make_platform_green():
    platform = Platform()
    platform.x = random.randrange(0, 625)
    platform.y = random.randrange(PLATFORM_HEIGHT, WINDOW_HEIGHT - PLATFORM_HEIGHT)

    return platform

def make_platform_blue():
    platform1 = Platform()
    platform1.x = random.randrange(0, 625)
    platform1.y = random.randrange(PLATFORM_HEIGHT, WINDOW_HEIGHT - PLATFORM_HEIGHT)
    platform1.change_x = random.randrange(1, 2)

    return platform1

主循环

def main():

    size = [WINDOW_HEIGHT, WINDOW_HEIGHT]
    window = pygame.display.set_mode(size)
    Score = 0
    x5 = 200
    y5 = 620
    isJump = False
    jumpCount = 10
    player_height = 75
    player_width  = 50
    make_blue = False
    make_green = False
    vel = 5
    done = False
    clock = pygame.time.Clock()
    platform_list = []
    platform1_list = []
    platform = make_platform_green()
    platform1 = make_platform_blue()
    platform_list.append(platform)
    platform1_list.append(platform1)
    clock.tick(60)

这是我不知道的碰撞代码。应该检查平台的像素中是否有我的播放器像素。

    def collision():
        for i in range(x5, x5 + player_width):
            for b in range(y5, y5 + player_height):
                if i >= platform.x and i >= platform.x + PLATFORM_WIDTH and b <= platform.y and b <= platform.y + PLATFORM_HEIGHT:
                    isJump = True

    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
        for platform1 in platform1_list:
            platform1.x += platform1.change_x
            if platform1.x  == 0 or platform1.x == 625:
                platform1.change_x *= -1
        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT]:
        x5 += vel
        if keys[pygame.K_LEFT]:
            x5 -= vel
        #Switches charecter to other side
        if x5 <= -50:
            x5 = 650
        if x5 >= 700:
            x5 = 0

应该在碰撞时运行的我的Jump代码

        #Bounce code
        if not (isJump):
            if y5 == 620:
                isJump = True
        else:
            if jumpCount >= -10:
                neg = 1
                if jumpCount < 0:
                    neg = -1
                y5 -= (jumpCount ** 2) * 0.2 * neg
                jumpCount -= 0.5
            else:
                isJump = False
                jumpCount = 10
        #Platform Spawner Spawns 1
        if Score >= 101:
            make_green = True
        if Score >= 101.1:
            make_green = False
        if Score >= 201:
            make_blue = True
        if Score >= 201.1:
            make_blue = False
        if make_green == True:
            platform = make_platform_green()
            platform_list.append(platform)
        if make_blue == True:
            platform1 = make_platform_blue()
            platform1_list.append(platform1)
        #Window fill must be before drawing
        window.fill((154, 205, 50))
        #Draws Platforms
        for platform in platform_list:
            pygame.draw.rect(window, (48, 128, 20), (platform.x, platform.y, PLATFORM_WIDTH, PLATFORM_HEIGHT ))
        for platform1 in platform1_list:
            pygame.draw.rect(window, (0, 0, 200), (platform1.x, platform1.y, PLATFORM_WIDTH, PLATFORM_HEIGHT))
        pygame.draw.rect(window, (238, 18, 137), (0, 695, 800, 5))
        pygame.draw.rect(window, (0, 0, 255), (x5, y5, player_width, player_height))
        if y5 == 620 or isJump == True:
            Score += 1
        collision()
        pygame.display.set_caption('Score: {}'.format(Score))
        pygame.display.update()
        pygame.display.flip()
    pygame.quit()
if __name__ == '__main__':
    main()

0 个答案:

没有答案