Pygame游戏开发之太空射击实战敌人精灵怎么实现
导读:本文共3650字符,通常情况下阅读需要12分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:在本课中,我们将添加一些敌人的精灵供玩家躲避。在本系列课程中,我们将使用Python和Pygame构建一个完整的游戏。它适用于已经了解Python基础知识并希望加深对Python的理解并学习编程游戏基础知识的初学者。敌人精灵在这一点上,我们不需要担心我们的敌人精灵是什么,我们只想让它们出现在屏幕上。你可能会认为你的游戏是关于宇宙飞船躲避流星或独角兽躲避飞行的比萨饼 - 就代码而言,这并不重要。记住... ...
目录
(为您整理了一些要点),点击可以直达。在本课中,我们将添加一些敌人的精灵供玩家躲避。在本系列课程中,我们将使用Python和Pygame构建一个完整的游戏。它适用于已经了解Python基础知识并希望加深对Python的理解并学习编程游戏基础知识的初学者。
敌人精灵
在这一点上,我们不需要担心我们的敌人精灵是什么,我们只想让它们出现在屏幕上。你可能会认为你的游戏是关于宇宙飞船躲避流星或独角兽躲避飞行的比萨饼 - 就代码而言,这并不重要。
记住这一点,我们将在代码中将敌人的精灵命名为Mob通用名称。MOB-Mobile原指游戏中所有由电脑控制的角色,现也引申指一般指怪物,任何游戏怪物都可叫MOB。
我们将从定义精灵属性开始:
classMob(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
这里的关键是选择一个适合Mob出现的地方。我们不希望它们只是突然出现,所以我们选择一个位于顶部上方的y值(y<0),以及一个位于两侧之间的x的随机值。
现在,对于update()
,我们可以快速移动精灵,但是当精灵从底部消失时呢?我们可以删除该精灵,然后生成另一个精灵,或者通过将精灵移回顶部上方的随机位置来获得完全相同的效果:
defupdate(self):
self.rect.y+=self.speedy
ifself.rect.top>HEIGHT+10:
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
生成敌人
我们将希望有很多敌人,所以我们将建立一个新的mobs
组来控制所有敌人。这也将在以后的步骤中使我们的编程更轻松。然后,我们生成一些Mob并将其添加到组中:
all_sprites=pygame.sprite.Group()
mobs=pygame.sprite.Group()
player=Player()
all_sprites.add(player)
foriinrange(8):
m=Mob()
all_sprites.add(m)
mobs.add(m)
现在你应该有源源不断的Mob从屏幕上下来,就像这样:
这很好,但是让Mob都直接向下移动有点无聊。让我们在 x 方向上添加一点运动:
classMob(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
self.speedx=random.randrange(-3,3)
defupdate(self):
self.rect.x+=self.speedx
self.rect.y+=self.speedy
ifself.rect.top>HEIGHT+10orself.rect.left<-25orself.rect.right>WIDTH+20:
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
请注意,我们需要更改if
语句以便在Mob离开屏幕时重新生成Mob。对角线移动的Mob在离开底部之前就已经离开侧面,所以我们需要当Mob离开屏幕时快速地重置它。
您的游戏现在应如下所示:
在下一课中,我们将学习如何检测两个精灵何时相互碰撞(碰撞),并使玩家能够向Mob开枪。
此部分的完整代码
#KidsCanCode-GameDevelopmentwithPygamevideoseries相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。Shmupgame-part2
Videolink:https://www.youtube.com/watch?v=-5GNbL33hz0
Enemysprites
importpygame
importrandom
WIDTH=480
HEIGHT=600
FPS=60definecolors
WHITE=(255,255,255)
BLACK=(0,0,0)
RED=(255,0,0)
GREEN=(0,255,0)
BLUE=(0,0,255)
YELLOW=(255,255,0)initializepygameandcreatewindow
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Shmup!")
clock=pygame.time.Clock()
classPlayer(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((50,40))
self.image.fill(GREEN)
self.rect=self.image.get_rect()
self.rect.centerx=WIDTH/2
self.rect.bottom=HEIGHT-10
self.speedx=0
defupdate(self):
self.speedx=0
keystate=pygame.key.get_pressed()
ifkeystate[pygame.K_LEFT]:
self.speedx=-8
ifkeystate[pygame.K_RIGHT]:
self.speedx=8
self.rect.x+=self.speedx
ifself.rect.right>WIDTH:
self.rect.right=WIDTH
ifself.rect.left<0:
self.rect.left=0
classMob(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
self.speedx=random.randrange(-3,3)
defupdate(self):
self.rect.x+=self.speedx
self.rect.y+=self.speedy
ifself.rect.top>HEIGHT+10orself.rect.left<-25orself.rect.right>WIDTH+20:
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
all_sprites=pygame.sprite.Group()
mobs=pygame.sprite.Group()
player=Player()
all_sprites.add(player)
foriinrange(8):
m=Mob()
all_sprites.add(m)
mobs.add(m)Gameloop
running=True
whilerunning:keeplooprunningattherightspeed
clock.tick(FPS)
Processinput(events)
foreventinpygame.event.get():
checkforclosingwindow
ifevent.type==pygame.QUIT:
running=FalseUpdate
all_sprites.update()
Draw/render
screen.fill(BLACK)
all_sprites.draw(screen)afterdrawingeverything,flipthedisplay
pygame.display.flip()
pygame.quit()
Pygame游戏开发之太空射击实战敌人精灵怎么实现的详细内容,希望对您有所帮助,信息来源于网络。