我将解释一些程序。 我想做一个蛇游戏。 我的问题是,蛇总是从屏幕的角落开始,这是蛇应该死的地方。 我想在屏幕上的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 )
答案 0 :(得分:1)
pygame.display
假定显示的位置(0,0)为左上角,因此可能在放置图像时,您正在位置(0,0)处进行此操作。在致电:{/ p>时,您应该检查player.rect
中的位置是否为(0,0)
screen.blit( player.image, player.rect )
如果您想将image
置于屏幕的随机位置,则可以使用x
库生成两个随机数(y
和random
)并将它们传递给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()
。这将更新您的屏幕上的图像。