- 帖子
- 24
- 精华
- 0
- 积分
- 87
- 阅读权限
- 20
- 注册时间
- 2018-6-17
- 最后登录
- 2018-9-4
|
crossin先生 发表于 2018-6-24 13:30
你需要有个间隔时间,不要让子弹那么快出来,不然你一共就5颗,后面就出不来了
代码里是有 interval_b 这 ...
Interval_b我试过200, 我之前是30, 就是加了碰撞代码后,就出现异常了。我一共确实也就5颗,但是后面也会出来,5颗一组5颗一组的射出来。这是我的代码:
import pygame
from sys import exit
import random
class Bullet:
def __init__(self):
self.x=0
self.y=-1
self.image= pygame.image.load('bullet.png').convert_alpha()
self.active=False
def move(self):
if self.active:
self.y-=5
if self.y<0:
self.active=False
def restart(self):
mousex,mousey=pygame.mouse.get_pos()
self.x=mousex-self.image.get_width()/2
self.y=mousey-self.image.get_height()/2
self.active=True
class Air:
def __init__(self):
self.x=0
self.y=0
self.image=pygame.image.load('air.png').convert_alpha()
def Move(self):
mousex,mousey=pygame.mouse.get_pos()
self.x=mousex-self.image.get_width()/2
self.y=mousey-self.image.get_height()/2
class Enemy:
def restart(self):
self.x=random.uniform(30,420)
self.y=random.uniform(-200,-50)
def __init__(self):
self.restart()
self.image=pygame.image.load('enemy.png')
self.speed=0.08
def move(self):
if self.y>608:
self.speed+=0.01
self.restart()
else:
self.y=self.y+self.speed
pygame.init()
screen=pygame.display.set_mode((450,608))
pygame.display.set_caption('Star War')
background=pygame.image.load('background.png').convert()
interval_b=0
index_b=0
bullets=[]
for i in range(10):
bullets.append(Bullet())
air=Air()
enemies=[]
for i in range(6):
enemies.append(Enemy())
#def checkHit(enemy, bullet):
# if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and (bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height()):
# enemy.restart()
# bullet.active = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
screen.blit(background,(0,0))
interval_b-=1
if interval_b<0:
bullets[index_b].restart()
interval_b=30
index_b=(1+index_b)%10
for e in enemies:
e.move()
screen.blit(e.image,(e.x,e.y))
for b in bullets:
if b.active:
#for e in enemies:
# checkHit(e,b)
b.move()
screen.blit(b.image,(b.x,b.y))
air.Move()
screen.blit(air.image,(air.x,air.y))
pygame.display.update() |
|