Python Pygame屏幕获胜';t blit
我有一个类似于Agar.io的测试游戏,在这个游戏中,方形玩家触摸“位”并增长。问题是位的生成。比特每秒生成一次,并有自己的表面。但是,该程序不会将位(无双关语)插入初始曲面 代码如下:Python Pygame屏幕获胜';t blit,python,pygame,blit,Python,Pygame,Blit,我有一个类似于Agar.io的测试游戏,在这个游戏中,方形玩家触摸“位”并增长。问题是位的生成。比特每秒生成一次,并有自己的表面。但是,该程序不会将位(无双关语)插入初始曲面 代码如下: import pygame import random pygame.init() clock = pygame.time.Clock() display = pygame.display screen = display.set_mode([640,480]) rect_x = 295 rect_y = 21
import pygame
import random
pygame.init()
clock = pygame.time.Clock()
display = pygame.display
screen = display.set_mode([640,480])
rect_x = 295
rect_y = 215
display.set_caption("Agar")
d = False
bits = []
size = 50
steps = 0
class Bit:
cscreen = display.set_mode([640,480])
circ = pygame.draw.circle(cscreen, (65, 76, 150), (random.randrange(40, 600), random.randrange(40, 440)), 5)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
d = True
if d == True:
break
# Fill background
screen.fill((5, 58, 0))
# Create player object
player = pygame.draw.rect(screen, (250, 197, 255), [rect_x, rect_y, size, size])
# Moving
if pygame.key.get_pressed()[pygame.K_UP]:
rect_y -= 2
if pygame.key.get_pressed()[pygame.K_DOWN]:
rect_y += 2
if pygame.key.get_pressed()[pygame.K_RIGHT]:
rect_x += 2
if pygame.key.get_pressed()[pygame.K_LEFT]:
rect_x -= 2
# Bit generation
if steps == 60:
new_bit = Bit()
bits.append(new_bit.circ)
screen.blit(new_bit.cscreen, (0,0))
steps = 0
steps += 1
# Collision detection
collision = player.collidelist(bits)
if collision != -1:
bits[collision].cscreen.fill((0,0,0,0))
# Make player larger
size += 10
# FPS limit
clock.tick(60)
# Refresh
display.flip()
注意,没有错误消息
提前感谢。要使每个
位
对象具有不同的位置和实例变量,您需要在Bit类中有一个\uuuuu init\uuuu
方法。通过添加一个\uuuu init\uuuu
,并将self.
添加到变量中,blitting工作
但我要提醒你一句。当您为每个对象创建一个单独的cscreen
,然后将该cscreen
blit到您的实际屏幕时,您就可以去掉所有被blit的cscreen
,一次只能查看1位。即使您有cscreen
在\uuuuu init\uuuuu
之外,现在删除旧的也会有问题,因此我建议您采取不同的方法
我的建议是找到一个点的小图片,并在位的\uuuu init\uuuu
方法中写入这些行
self.image = pygame.image.load("reddot.png")
self.rect = self.image.get_rect()
创建位后,将其添加到pygame.sprite.Group()
。这些组有非常方便的内置方法。其中之一是.draw()
。它将遍历您的位组
,并使用每个位的self.image
和self.rect
每次将它们绘制到正确的位置,而无需担心。当吃掉位
时,您可以从组中删除位
,现在它将为您擦除
随机附带说明:我建议您将事件循环更改为仅在它event.type==pygame.QUIT
时中断。这样,Python就不需要在每一帧上检查if d==True
语句,同时使代码的可读性稍微提高。如果它只是跳出for循环(对我来说,它很好地退出了),那么在导入sys
之后,您可以使用sys.exit()
,您是否在任何地方调用display.update()
?我正在调用display.flip(),这就足够了吗?还是我必须这么做?谢谢,这帮了大忙。嗯,还是不行。我已经制作了小精灵和小组。下面是代码:将bit.draw更改为bit.draw(屏幕)。。在做了这些之后,我得到了这个形象。如果不确定如何正确使用这些功能,请查看pygame.org/docs。我看过你的代码,大部分看起来都不错。关于碰撞,如果您有一个包含所有位的pygame组,并且想要检查您的玩家是否与其中任何位发生碰撞,我建议使用pygame.sprite.spriteCollizeAny(sprite,Group)。如果您有更多问题,请告诉我:DAlso,随机化器工作不正常。所有位都出现在同一点上。为什么会这样?在Bit的init类中,添加以下行:self.rect=self.rect.move(randrange(40600),randrange(40600)),在进行更改后,您不会像在发布的问题中那样,在另一行中随机移动东西。默认情况下,图像矩形位于左上角。这将为您移动它们