pygame-将图片放在屏幕上的随机位置

时间:2015-08-06 07:26:21

标签: python random position pygame

我将解释一些程序。 我想做一个蛇游戏。 我的问题是,蛇总是从屏幕的角落开始,这是蛇应该死的地方。 我想在屏幕上的randon位置放置“图像”(图像是照片的名称)。 我该怎么做?我尝试了几次,但progran被卡住了...... 这是代码..

  import sys, pygame,time
  FPS=30
  fpsClock=pygame.time.Clock()
  window_size = ( 819, 460 )

  white = ( 255, 255, 255 )
  screen = pygame.display.set_mode( window_size )


  move = (0,0) # init movement

  done = False

  image = pygame.image.load( 'snikebodydraw.png')
  image1 = pygame.image.load( 'deadarea.png')
  screen.blit( image, (100,100) )
  rect = image.get_rect()


  while not done:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
        sys.exit()

      if event.type == pygame.KEYDOWN:


        if event.key == pygame.K_LEFT:
          move = (-10, 0 )
        if event.key == pygame.K_RIGHT:
          move = ( 10, 0 )
        if event.key == pygame.K_UP:
          move = ( 0,-10 )
        if event.key == pygame.K_DOWN:
          move = ( 0, 10 )

    rect = rect.move(move)

    screen.blit(image1, (0,0))
    screen.blit( image, rect )

更多信息:     http://www.siz.co.il/my.php?i=zlznmy3imumj.png

3 个答案:

答案 0 :(得分:1)

pygame.display假定显示的位置(0,0)为左上角,因此可能在放置图像时,您正在位置(0,0)处进行此操作。在致电:{/ p>时,您应该检查player.rect中的位置是否为(0,0)

  screen.blit( player.image, player.rect )

如果您想将image置于屏幕的随机位置,则可以使用x库生成两个随机数(yrandom)并将它们传递给blit的第二个参数,例如在您的情况下(考虑到您的显示大小为819x460):

  screen.blit( player.image, (random.randint(0,819),random.randint(0,460)) )

<强>更新 如果您想从头寸(100,100)开始,我认为您的变量rect存在问题,因为代码上的行rect = image.get_rect()会返回rect=(0,0,50,50),我认为这是左上角角落和图像的右下角。因此,当您稍后执行rect = rect.move(move)时,rect的两个第一个值是(0,0),它们被传递给blit(),然后您的图像在第一次迭代中返回到位置(0,0)循环。

可能的解决方案是在进入循环之前在rect = rect.move(100,100)下方添加rect = image.get_rect()。这将使其覆盖初始(0,0)值,如下所示:

rect = image.get_rect()
rect = rect.move(100,100)

尝试解决这个问题,你就可以解决问题了。

您还需要考虑当您执行blit()时,通常您所定位的图像的点是图像的左上角。 例如,如果你这样做:

# To center the point (0,0) of the image at the location (0,0) of the screen
screen.blit(image,(0,0))
# To center the point (0,0) of the image at the location (100,100) of the screen
screen.blit(image,(100,100))

因此,在定位图像时也要考虑到这一点。

答案 1 :(得分:0)

回答(仅)如何选择随机起始位置的问题:

import random

x = random.randint(0,xmax)
y = random.randint(0,ymax)

screen.blit(player.image, (x,y))

在进入while循环之前绘制一次启动配置,这样您就不必更改更新过程。

答案 2 :(得分:0)

就像许多人在评论中所说的那样,在你的blitting之后你需要pygame.display.flip()pygame.display.update()。这将更新您的屏幕上的图像。