2014-11-06 27 views
-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()  

回答

0

你問兩個問題在這裏,至少。在StackOverflow上,您需要限制您的帖子爲單個問題。

第二個問題是this的重複。

+0

好了,你至少有一個想法,我應該如何處理我的第一個問題?我在這裏沒有遇到任何類似的問題... btw我編輯了我原來的帖子。 – thebaldhen 2014-11-09 14:05:30

+0

您可能會看到更好的可見性,並以正確的標題再次提出問題。 – jgritty 2014-11-10 00:24:41