-1
[MEMORY ISSUE DELETED FROM POST问题]碰撞检测的问题(pygame的),“碰撞检测”不打印一次2个表面悬停在彼此
嗨我新的pygame的和我有几个小问题。一旦jetfighter rect与鼠标按钮的点击之前相撞,而不是表面悬停在彼此之上,Python shell就不会打印collission。第54行的if语句正如预期的那样工作,所以我有点难以理解为什么第61行的声明不能像我期望的那样工作。如果有人能够解释我的问题,我将不胜感激。
代码:
import pygame, sys, pygame.mixer
from pygame.locals import *
import random
pygame.init()
bif="space.jpg"
jf="spacefightersprite.png"
enemy="TarantulaSpaceFighter.png"
laser=pygame.mixer.Sound("LaserBlast.wav")
explosionsound=pygame.mixer.Sound("Explosion.wav")
screen=pygame.display.set_mode((1000,800),0,32)
caption=pygame.display.set_caption("Jet Fighter X")
background=pygame.image.load(bif).convert()
jetfighterx=pygame.image.load(jf)
jetfighterx=pygame.transform.scale(jetfighterx, (400,400))
tarantula=pygame.image.load(enemy)
tarantula=pygame.transform.scale(tarantula, (100,100))
laserblast=pygame.image.load("C:\Python27\laser.png")
explosion=pygame.image.load("C:\Python27\explosion.png")
explosion=pygame.transform.scale(explosion, (150,150))
ex,ey=450,0
movex,movey=0,0
clock=pygame.time.Clock()
speed=300
shoot_y=0
collision=False
loop=True
while True:
pygame.mouse.set_visible(False)
mx,my=pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type==KEYDOWN:
if event.key==K_ESCAPE or event.key==K_q:
sys.exit()
if event.type==MOUSEBUTTONDOWN:
laserblast=pygame.image.load("C:\Python27\laser.png")
laser.play()
shoot_y=my-200
shoot_x=mx-16
if loop==True:
if shoot_y>0:
screen.blit(laserblast, (shoot_x, shoot_y))
shoot_y-=10
laserblast_rect=laserblast.get_rect(center=(shoot_x, shoot_y))
tarantula_rect=tarantula.get_rect(center=(ex, ey))
jetfighterx_rect=jetfighterx.get_rect(center=(mx, my))
if laserblast_rect.colliderect(tarantula_rect):
laserblast=pygame.transform.scale(laserblast,(0,0))
screen.blit(explosion, (ex, ey-50))
explosionsound.play()
collision=True
elif jetfighterx_rect.colliderect(tarantula_rect):
print "Collision detected"
pygame.display.update()
screen.blit(background, (0,0))
screen.blit(jetfighterx,(mx-200,my-200))
if collision==False:
screen.blit(tarantula, (ex, ey))
milli=clock.tick()
seconds=milli/1000.
dmy=seconds*speed
ey+=dmy
if ey>800:
collision=False
ey=0
ex=random.randint(50,800)
pygame.display.update()
好了,你至少有一个想法,我应该如何处理我的第一个问题?我在这里没有遇到任何类似的问题... btw我编辑了我原来的帖子。 – thebaldhen 2014-11-09 14:05:30
您可能会看到更好的可见性,并以正确的标题再次提出问题。 – jgritty 2014-11-10 00:24:41