Python pygame中的isCollision函数
我最近开始在pygame中编程,我一直在想为什么我的isCollision函数不能工作。您实际上不必运行代码,因为您需要下载图片以使其执行。如果可以,请告诉我为什么isCollision函数不起作用。在主循环中有一个for i In range(num_of_障碍物)循环,其中有一个if 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
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。好的。我很尴尬,我甚至没有注意到,但谢谢!