Python 为什么下降的矩形随着时间的推移变得越来越多?
我不熟悉这个游戏。 我写了一个简单的游戏,避免矩形掉落。但我发现,随着时间的推移,下降的矩形越来越多,一些矩形不能让Python 为什么下降的矩形随着时间的推移变得越来越多?,python,pygame,Python,Pygame,我不熟悉这个游戏。 我写了一个简单的游戏,避免矩形掉落。但我发现,随着时间的推移,下降的矩形越来越多,一些矩形不能让pygame.sprite.spritecollideny在遇到玩家时产生。我的代码中有任何错误吗 这是我的密码 import pygame import random from pygame.locals import * FPS = 25 fpsclock = pygame.time.Clock() #define the player class Player(pygam
pygame.sprite.spritecollideny
在遇到玩家时产生。我的代码中有任何错误吗
这是我的密码
import pygame
import random
from pygame.locals import *
FPS = 25
fpsclock = pygame.time.Clock()
#define the player
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((30, 30))
self.surf.fill((123, 123, 123))
self.rect = self.surf.get_rect()
self.rect.y = 550
self.rect.x = 175
def update(self, pressed_keys):
"""
if pressed_keys[K_UP]:
self.rect.move_ip(0, -5)
if pressed_keys[K_DOWN]:
self.rect.move_ip(0, 5)
"""
if pressed_keys[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(5, 0)
#keep player on the screen
if self.rect.left < 0:
self.rect.left = 0
elif self.rect.right > 400:
self.rect.right = 400
class Enemy(pygame.sprite.Sprite):
def __init__(self):
super(Enemy, self).__init__()
self.surf = pygame.Surface((20, 20))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect(center = (random.randint(0, 400), 0))
self.speed = random.randint(5, 10)
def update(self):
self.rect.move_ip(0, self.speed)
if self.rect.bottom < 0:
self.kill()
class Game():
def __init__(self):
#initialization
pygame.init()
#create the screen object
self.screen = pygame.display.set_mode((400, 600))
#instantiate the player
self.player = Player()
self.score = 0
#create enemies
self.ADDENEMY = pygame.USEREVENT + 2
pygame.time.set_timer(self.ADDENEMY, 250)
self.enemies = pygame.sprite.Group()
self.all_sprites = pygame.sprite.Group()
self.all_sprites.add(self.player)
def run(self):
running = True
#main loop
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
elif (event.type == self.ADDENEMY):
new_enemy = Enemy()
self.enemies.add(new_enemy)
self.score = self.score + 1
self.all_sprites.add(new_enemy)
pressed_keys = pygame.key.get_pressed()
self.player.update(pressed_keys)
self.enemies.update()
self.screen.fill((0,0,0))
#draw the player to the screen
for entity in self.all_sprites:
self.screen.blit(entity.surf, entity.rect)
if pygame.sprite.spritecollideany(self.player, self.enemies):
print 'score: ' + str(self.score)
self.score = 0
screen_image = pygame.surfarray.array3d(pygame.display.get_surface())
#update the display
pygame.display.update()
#fpsclock.tick(FPS)
#return reward, screen_image
game = Game()
game.run()
导入pygame
随机输入
从pygame.locals导入*
FPS=25
fpscall=pygame.time.Clock()
#定义玩家
职业玩家(pygame.sprite.sprite):
定义初始化(自):
超级(玩家,自我)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
self.surf=pygame.Surface((30,30))
自冲浪填充((123123123))
self.rect=self.surf.get_rect()
自校正y=550
self.rect.x=175
def更新(自我,按下_键):
"""
如果按下[K\U UP]键:
自校正移动ip(0,-5)
如果按下按键[K向下]:
自校正移动ip(0,5)
"""
如果按[左]键[左]:
自校正移动ip(-5,0)
如果按下按键[K_RIGHT]:
自校正移动ip(5,0)
#让玩家保持在屏幕上
如果self.rect.left<0:
self.rect.left=0
如果self.rect.right>400:
self.rect.right=400
职业敌人(pygame.sprite.sprite):
定义初始化(自):
超级(敌人,自己)。\uuuuu init\uuuuuuu()
self.surf=pygame.Surface((20,20))
self.surf.fill((255,255,255))
self.rect=self.surf.get_rect(中心=(random.randint(0400),0))
self.speed=random.randint(5,10)
def更新(自我):
自校正移动ip(0,自校正速度)
如果self.rect.bottom<0:
self.kill()
类游戏():
定义初始化(自):
#初始化
pygame.init()
#创建屏幕对象
self.screen=pygame.display.set_模式((400600))
#实例化播放器
self.player=player()
self.score=0
#树敌
self.ADDENEMY=pygame.USEREVENT+2
pygame.time.set_定时器(self.ADDENEMY,250)
self.friends=pygame.sprite.Group()
self.all_sprites=pygame.sprite.Group()
self.all_精灵添加(self.player)
def运行(自):
运行=真
#主回路
运行时:
对于pygame.event.get()中的事件:
如果event.type==KEYDOWN:
如果event.key==K_转义:
运行=错误
elif event.type==退出:
运行=错误
elif(event.type==self.ADDENEMY):
新敌人
自我。敌人。添加(新敌人)
self.score=self.score+1
自我。所有精灵。添加(新敌人)
按下按键=pygame.key.get_pressed()
self.player.update(按_键)
self.friends.update()
自我筛选填充((0,0,0))
#将玩家拉到屏幕上
对于self.all_精灵中的实体:
self.screen.blit(entity.surf、entity.rect)
如果pygame.sprite.spriteany(self.player,self.敌人):
打印“分数:”+str(自我分数)
self.score=0
screen\u image=pygame.surfarray.array3d(pygame.display.get\u surface())
#更新显示
pygame.display.update()
#fpsclock.tick(FPS)
#返回奖励,屏幕图片
游戏
game.run()
运行代码大约五分钟后,错误出现。当敌人的精灵穿过屏幕底部而不是顶部时,你必须杀死他们(y=0是屏幕顶部,y=600是底部): 编辑:要杀死碰撞的精灵,请使用
spritecollideany
返回的值,该值可以是None
或碰撞的精灵:
collided_sprite = pygame.sprite.spritecollideany(self.player, self.enemies)
if collided_sprite is not None:
print('score:', self.score)
self.score = 0
collided_sprite.kill()
请注意,每帧仅删除一个精灵。如果您想同时删除多个精灵,最好使用
True
并将其作为dokill
参数传递。非常感谢。对不起,我怎样才能杀死击中玩家的长方形呢?我已经编辑了答案,尽管这属于另一个问题,你可能会找到很多关于这个主题的其他帖子。事实上,这似乎是以前没有人问过的。也许我应该自己问和回答这个问题。
collided_sprite = pygame.sprite.spritecollideany(self.player, self.enemies)
if collided_sprite is not None:
print('score:', self.score)
self.score = 0
collided_sprite.kill()