Python pygame中的isCollision函数

Python pygame中的isCollision函数,python,python-3.x,pygame,pycharm,pygame-surface,Python,Python 3.x,Pygame,Pycharm,Pygame Surface,我最近开始在pygame中编程,我一直在想为什么我的isCollision函数不能工作。您实际上不必运行代码,因为您需要下载图片以使其执行。如果可以,请告诉我为什么isCollision函数不起作用。在主循环中有一个for i In range(num_of_障碍物)循环,其中有一个if iscollision语句。如果您想了解该程序的功能,以下是所有基本文件: 顺便说一句,请不要重写整个代码。][] 不要介意这些评论,因为它们是波兰语的。 这是我的密码: import pygame impor

我最近开始在pygame中编程,我一直在想为什么我的isCollision函数不能工作。您实际上不必运行代码,因为您需要下载图片以使其执行。如果可以,请告诉我为什么isCollision函数不起作用。在主循环中有一个for i In range(num_of_障碍物)循环,其中有一个if iscollision语句。如果您想了解该程序的功能,以下是所有基本文件: 顺便说一句,请不要重写整个代码。][]

不要介意这些评论,因为它们是波兰语的。 这是我的密码:

import pygame
import math
import random

#inicjowanie pygame (to trzeba zawsze dać)
pygame.init()

screen = pygame.display.set_mode((800, 600))

pygame.display.set_caption('Kosmiczna Przygoda')

playericon = pygame.image.load('rocket.png')
player2icon = pygame.image.load('rocket.png')

backgroundImg = pygame.image.load('1083.jpg')


num_of_obstacles = 10
obstacleImg = []

obsX = [random.randint(0, 400) for i in range(num_of_obstacles // 2)]
obs2X = [random.randint(400, 800) for i in range(num_of_obstacles // 2)]

for i in obs2X:
    obsX.append(i)

obsY = []

for i in range(num_of_obstacles):
    obstacleImg.append(pygame.image.load('rectangle.png'))


for i in range(num_of_obstacles):
    obsY.append(random.randint(50, 300))

# pierwsze koordynaty
PlayerX, PlayerY = 200, 480
Player2X, Player2Y = 500, 480





PlayerY_change, PlayerX_change = 1, 1
Player2Y_change, Player2X_change = 1, 1



def player(x,y,x2,y2):
    screen.blit(playericon, (x, y))
    screen.blit(player2icon, (x2, y2))


winFont = pygame.font.Font('freesansbold.ttf', 64)
won1, won2 = False, False

def player1Wins():
    win_text = winFont.render('PLAYER 1 WON!',True,(255,255,255))
    screen.blit(win_text,(30,30))


def player2Wins():
    win_text = winFont.render('PLAYER 2 WON!',True,(255,255,255))
    screen.blit(win_text,(150,30))

# wzór matematyczny na odległość koordynatów dwóch punktów (sprawdzabnie czy się dotykają)
def isCollision(obsX,obsY,pX,pY):
    distance = math.sqrt(math.pow(obsX - pX, 2) + math.pow(obsY - pY, 2))
    if distance >= 27:
        return True
    else:
        return False

running = True
won = False

while running:
    # tło (blit to rysowanie)
    screen.blit(backgroundImg, (0, 0))


    # event to wydarzenie zarejestrowane przez program
    # jeżeli klikne krzyzyk w prawym gornym rogu to program sie zamknie
    # jeżeli nacisne np strzalke w prawo to rakieta przesuwa się na ukos w prawo

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                PlayerX_change = -1
            if event.key == pygame.K_d:
                PlayerX_change = 1
            if event.key == pygame.K_LEFT:
                Player2X_change = -1
            if event.key == pygame.K_RIGHT:
                Player2X_change = 1
            if event.key == pygame.K_w:
                PlayerY_change = 2
            if event.key == pygame.K_UP:
                Player2Y_change = 2
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                PlayerY2_change = 0.75
            if event.key == pygame.K_w:
                PlayerY_change = 0.75

    for enemy in range(num_of_obstacles):
        if won:
            screen.blit(obstacleImg[enemy], (2000, 2000))
        else:
            #if isCollision(obsX[enemy], obsY[enemy],PlayerX,PlayerY):
                #player2Wins()


            screen.blit(obstacleImg[enemy], (obsX[enemy], obsY[enemy]))

    # Granice Ekranu
    if PlayerX <= 0:
        PlayerX = 0
    elif PlayerX >= 736:
        PlayerX = 736
    if PlayerY <= 0:
        won, won1 = True, True
        PlayerY, Player2Y = 480, 480
        PlayerX, Player2X = 200, 500

    if Player2X <= 0:
        Player2X = 0
    elif Player2X >= 736:
        Player2X = 736
    if Player2Y <= 0:
        won, won2 = True, True
        PlayerY, Player2Y = 480, 480
        PlayerX, Player2X = 200, 500

    if won1:
        player1Wins()
        PlayerX_change, PlayerY_change = 0, 0
        Player2X_change, Player2Y_change = 0, 0
    if won2:
        player2Wins()
        PlayerX_change, PlayerY_change = 0, 0
        Player2X_change, Player2Y_change = 0, 0

    # Zmiana kordynatów rakiety

    PlayerX += PlayerX_change
    PlayerY -= PlayerY_change
    Player2X += Player2X_change
    Player2Y -= Player2Y_change

    player(PlayerX, PlayerY, Player2X, Player2Y)
    pygame.display.update()
导入pygame
输入数学
随机输入
#伊尼科瓦尼·皮加梅(致trzeba zawsze dać)
pygame.init()
screen=pygame.display.set_模式((800600))
pygame.display.set_标题('Kosmiczna Przygoda')
playericon=pygame.image.load('rocket.png')
player2icon=pygame.image.load('rocket.png')
backgroundImg=pygame.image.load('1083.jpg')
障碍物数量=10
obstacleImg=[]
obsX=[random.randint(0400)表示范围内的i(num\u of\u/2)]
obs2X=[random.randint(400800)表示范围内的i(num_of_/2)]
对于obs2X中的i:
obsX.append(一)
obsY=[]
对于范围内的i(障碍物数量):
obstacleImg.append(pygame.image.load('rectangle.png'))
对于范围内的i(障碍物数量):
obsY.append(random.randint(50300))
#皮尔斯·库尔德纳蒂
PlayerX,PlayerY=200480
Player2X,Player2Y=500480
PlayerY_change,PlayerX_change=1,1
Player2Y_变化,Player2X_变化=1,1
def播放器(x、y、x2、y2):
屏幕。blit(playericon,(x,y))
屏幕。blit(player2icon,(x2,y2))
winFont=pygame.font.font('freesansbold.ttf',64)
won1,won2=假,假
def player1Wins():
win_text=winFont.render('PLAYER 1赢得!',True,(255255))
屏幕。blit(win_文本,(30,30))
def player2Wins():
win_text=winFont.render('PLAYER 2赢得!',True,(255255))
屏幕。blit(win_文本,(150,30))
#wzór matematyczny na odległośćkoordynatów dwóch punktów(Sprawdzannie czy siędotykają)
def集成(obsX、obsY、pX、pY):
距离=math.sqrt(math.pow(obsX-pX,2)+math.pow(obsY-pY,2))
如果距离>=27:
返回真值
其他:
返回错误
运行=真
韩元=假
运行时:
#tło(blit to rysowanie)
屏幕blit(背景img,(0,0))
#wydarzenie zarejestrowane项目活动
#jeżeli klikne krzyzyk w prawym gornym rogu将为您的zamknie编程
#我是一位来自普拉沃的新员工,我是一位来自普拉沃的ukos员工
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_a:
PlayerX_change=-1
如果event.key==pygame.K\u d:
PlayerX_change=1
如果event.key==pygame.K_左:
Player2X_变化=-1
如果event.key==pygame.K_RIGHT:
Player2X_change=1
如果event.key==pygame.K_w:
PlayerY_change=2
如果event.key==pygame.K_UP:
Player2Y_变化=2
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_UP:
player2_变化=0.75
如果event.key==pygame.K_w:
PlayerY_变化=0.75
对于范围内的敌人(障碍物数量):
如果获胜:
屏幕.闪电(障碍[敌人],(20002000))
其他:
#如果合并(obsX[敌人]、obsY[敌人]、玩家X、玩家):
#player2Wins()
blit(障碍物[敌人],(障碍物[敌人],(障碍物[敌人]),障碍物[敌人])
#埃克拉努格兰尼斯酒店
如果PlayerX=736:
PlayerX=736

如果PlayerY您应该检查距离是否
=27

def isCollision(obsX、obsY、pX、pY):
距离=math.sqrt(math.pow(obsX-pX,2)+math.pow(obsY-pY,2))

返回距离什么不起作用?您能否提供一个示例,说明您期望函数产生什么以及它实际产生什么?一般来说,我们可以运行最少的代码示例是一个好主意。乍一看,如果距离大于27,为什么要检测碰撞?不知何故,在我运行代码的那一刻,isCollision变为true。此外,与玩家碰撞的对象大小为27。此外,isCollision函数在循环中运行,用于范围内的i(敌人的数量)。我做了一个评论。是的,你不想在距离小于27时发生碰撞吗?我希望当玩家离障碍物足够近(27是玩家与障碍物中心之间的距离)时,该函数会返回True。好的。我很尴尬,我甚至没有注意到,但谢谢!