我正试图按照本教程学习pygame。我正试图繁殖敌人的物体,但我认为我犯了一个错误,因为没有显示任何东西。
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((75,25))
self.surf.fill((0, 0,0))
self.rect = self.surf.get_rect()
#Moves sprite based on keypresses(removed for clarity)
class Enemy(pygame.sprite.Sprite):
def __init__(self):
super(Enemy, self).__init__()
self.surf = pygame.Surface((20,10))
self.surf.fill((0,0,0))
self.rect = self.surf.get_rect(
center = (
random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
random.randint(0, SCREEN_HEIGHT),
)
)
self.speed = random.randint(5, 20)
# moves sprite based on speed, remove when passes left edge
def update(self):
self.rect.move_ip(-self.speed, 0)
if self.rect.right < 0:
self.kill()
#How sad for them
pygame.init()
#create screen
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
#custom events for adding a new Enemy
ADDENEMY = pygame.USEREVENT + 1
pygame.time.set_timer(ADDENEMY, 250)
# Instantiate player
player = Player()
enemies = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
#keep the game running!
running = True
#loop time!
while running:
#look at all the events
for event in pygame.event.get():
#did the user hit a key?
if event.type == KEYDOWN:
#Was it escape? uh oh we gotta stop
if event.key == K_ESCAPE:
running = False
elif event.type ==QUIT:
running = False
elif event.type == ADDENEMY:
#Create the new enemy
new_enemy = Enemy()
enemies.add(new_enemy)
all_sprites.add(new_enemy)
#gets the keys that were just pressed
pressed_keys = pygame.key.get_pressed()
#updates location based on keys
player.update(pressed_keys)
#updates enemy position
enemies.update()
#fill screen with white
screen.fill((255, 255, 255))
#Draw the sprites
for entity in all_sprites:
screen.blit(entity.surf, entity.rect)
# Create a surface and pass in a tuple containing legth and width
surf = pygame.Surface((50, 50))
pygame.display.flip()
据我所知,我必须创建一个敌人类,然后添加一个事件来添加敌人(ADDENEMY)。当该事件被调用时(由于计时器的作用,每250毫秒一次),它应该会显示一个向左移动的敌人,直到它到达显示的末尾。
我有一组敌人精灵和一组所有精灵,我使用screen.blit和for循环将所有精灵中的每个实体渲染到屏幕上。我错过了什么?当我运行这个(以及我编辑掉的部分)时,我看到玩家精灵很好,它移动了,但我没有看到任何敌人。
您的精灵不在窗口中。由于未正确指定范围,所有精灵都在窗口之外:
random.randint(SCREEN_WIDTH20,SCREEN_WIDTH100)
random.randint(20, SCREEN_WIDTH + 100),
此外,缩进还有一个问题。方法更新
需要是类Enemy
的作用域:
class Enemy(pygame.sprite.Sprite):
def __init__(self):
# [...]
# INDENTATION
#<--|
def update(self):
# [...]
此外,请参见pygame.sprite.Group.draw()
:
将包含的精灵绘制到Surface参数。这使用了源表面的Sprite.image
属性和Sprite.rect
。[...]
通过image
重命名属性surf
,并调用所有精灵。绘制(屏幕)
:
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.image = pygame.Surface((75,25))
self.image.fill((0, 0,0))
self.rect = self.image.get_rect()
class Enemy(pygame.sprite.Sprite):
def __init__(self):
super(Enemy, self).__init__()
self.image = pygame.Surface((20,10))
self.image.fill((0,0,0))
self.rect = self.image.get_rect(
center = (
random.randint(20, SCREEN_WIDTH + 100),
random.randint(0, SCREEN_HEIGHT),
)
)
self.speed = random.randint(5, 20)
while running:
# [...]
#for entity in all_sprites:
# screen.blit(entity.surf, entity.rect) <---- DELETE
all_sprites.draw(screen) <---- ADD
目前,当我运行它时,代码没有给出任何错误。即使我只是尝试渲染一个0,0的管道,没有任何弹出。 我已经得到了地板和鸟渲染正确,和其他一切工作正常。只有管道不会渲染。 我在看一段在线视频https://www.youtube.com/watch?v=UZg49z76cLw
这是GitHub上的python项目,我正在为Magic 8 Ball模拟制作GUI。我似乎无法使用.pack()函数,或者我的窗口只是永远加载而没有实例化。 创建时 当我点击按钮时,文本会出现
我遇到了这个简单的React函数组件,它渲染四次,而我希望它最初渲染一次,执行useffect更新状态,然后再次渲染。相反,控制台发送4个日志输出,表示它渲染了4次。了解react功能组件的基本生命周期的原因和资源吗? https://codesandbox.io/s/solitary-tree-t120d?file=/src/App.js:149-191
当我在基于pygame的游戏中使用精灵时,它们似乎不能正常工作——正如你在屏幕截图上看到的那样,它们的形状不正确,并且上部有一些奇怪的变形。 黑色方块顶部有变形;中间的精灵一定是箭头形状的东西。 加载图像时涉及的一段代码(从pygame的教程中复制粘贴): 我在MacOSX上的Python2.7.11和3.4.2上做了我的项目,发现了这个问题。但当我在Windows上的Python3.1上测试它时
问题内容: 我的React组件有问题。我组件的嵌套子代似乎没有渲染。这是我的代码: 我在此文件的顶部有以下两行: 这是我的组件: 我努力了: 以完整的HTML标记调用组件(打开和关闭) 将组件嵌套在组件中(在index.jsx文件中) 我知道嵌套组件是可能的。我已经看到了。由于某种原因,它对我不起作用。 问题答案: 要允许组件包含子项并正确渲染它们,必须使用。这是传递到所有组件与孩子为道具,包含组
问题内容: 输入不存在的URL时,我尝试呈现组件。但是,该组件会在所有路径中保持渲染。我正在使用。这是我设置的路线: 这是我的组件: 我当前面临的问题是消息:更改URL时,在和路由上不断弹出。我很难使消息仅在未定义的路线上显示。最初,我尝试切换路线,并在顶部创建更“详细”的路线,如下所示: 但是,它没有解决问题。有没有一种方法可以防止消息出现在我去的每条路由上(未定义的路由除外)? 问题答案: 您