有一说一,《PYTHON从入门到实践》这本书到了PYGAME这一章节写的十分乱。。真的想吐槽。。之前就因为类与类的复杂语法没看懂,导致这本书没看后续的章节。。也可能是我自己的基础不太扎实。。许多类里的用法真的搞不清。。包括GROUP和Spirte。。今晚被这个搞烦了。。去看视频了。
- 不过今天还是有收获…搞清楚昨天的飞机上下移动为啥会出去的问题了,还有就是今天把子弹做出来了。。就是子弹的调用还是不太清楚。。等等去看看别的教程找一下父类子类的东西。
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
#就是这个啥Sprite的啥玩意??。。看书没看懂
def __init__(self,ai_settings,screen,ship):
super(Bullet,self).__init__()
self.screen = screen
#开始制作子弹的形状
self.rect = pygame.Rect(0,0,ai_settings.bullet_width,ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx
self.rect.top = ship.rect.top
self.y = float(self.rect.y)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
self.y -= self.speed_factor
self.rect.y = self.y
def draw_buller(self):
pygame.draw.rect(self.screen,self.color,self.rect)
然后就是调用子弹部分,这部分还是容易理解的。但是做到这步,自己老是在纠结能不能按空格的时候一直发射子弹,放掉则发射子弹指示停止。明天尝试一下~
import sys
import pygame
from bullet import Bullet
def check_keydown_events(event,ship,ai_settings,screen,bullets):
if event.key == pygame.K_RIGHT:
ship.moving_right = True
print(event.key)
elif event.key == pygame.K_LEFT:
ship.moving_left = True
print(event.key)
elif event.key == pygame.K_UP:
ship.moving_up = True
print(event.key)
elif event.key == pygame.K_DOWN:
ship.moving_down = True
print(event.key)
elif event.key == pygame.K_SPACE:
new_bullet = Bullet(ai_settings,screen,ship)
bullets.add(new_bullet)
def check_keyup_events(event,ship):
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = False
elif event.key == pygame.K_UP:
ship.moving_up = False
elif event.key == pygame.K_DOWN:
ship.moving_down = False
def check_events(ship,ai_settings,screen,bullets):
#控制飞船移动
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,ship,ai_settings,screen,bullets)
#Event就是for循环里的event
elif event.type == pygame.KEYUP:
check_keyup_events(event,ship)
def update_screen(ai_settings,screen,ship,bullets):
# 更新屏幕,将颜色和飞船印上去,以及子弹
screen.fill(ai_settings.bg_color)
for bullet in bullets.sprites():
bullet.draw_buller()
ship.blitme()
ship.update()
pygame.display.flip()