2016-09-27 7 views
0

Меня научили перемещать изображение в pygame слева, справа, вверх и вниз. Наша следующая задача - сделать изображение по диагонали, но я не понимаю, как это сделать. Это мой код до сих пор: (извините за странные имена) О, а также у меня есть два изображения в моем коде. Мне было интересно, если бы я мог перемещать оба изображения без одного исчезновения на экране? Например, я могу перемещать одно изображение с помощью клавиш со стрелками, но другое изображение исчезнет. Я также могу переместить другое изображение с помощью WASD, но первое изображение исчезнет. Спасибо огромное!Как сделать изображение движущимся по диагонали в pygame

import pygame 

#set up the initial pygame window 
pygame.init() 
screen = pygame.display.set_mode([900,600]) 

#set background color 
background = pygame.Surface(screen.get_size()) 
background.fill([204,255,229]) 
screen.blit(background, (0,0)) 

#Pull in the image to the program 
my_image = pygame.image.load("google_logo.png") 
person = pygame.image.load("google_logo2.png") 

#copy the image pixels to the screen 
left_side = 50 
height = 50 
diagonal = 100 
down_diagonal = 100 
screen.blit(my_image, [left_side, height]) 
screen.blit (person, [diagonal, down_diagonal]) 

#Display changes 
pygame.display.flip() 

#set up pygame event loop 
running = True 
while running: 
for event in pygame.event.get(): 
    print event 
    if event.type == pygame.QUIT: 
      running = False 
    elif event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_q: 
      print "QUITTING NOW..." 
      pygame.time.delay(2000) 
      running = False 
     if event.key == pygame.K_h: 
      print "HELLO!" 
      pygame.time.delay(2500) 
      running = False 
     if event.key == pygame.K_c: 
      print "To move the original Google logo, use the arrow keys. To move the second logo, use the WASD keys." 
     elif event.key == pygame.K_RIGHT: 
      screen.blit(background, (0,0)) 
      left_side = left_side + 10 
      screen.blit(my_image, [left_side, height]) 
      pygame.display.flip() 
     elif event.key == pygame.K_LEFT: 
      screen.blit(background, (0,0)) 
      left_side = left_side - 10 
      screen.blit(my_image, [left_side, height]) 
      pygame.display.flip() 
     elif event.key == pygame.K_UP: 
      screen.blit(background, (0,0)) 
      height = height - 10 
      screen.blit(my_image, [left_side, height]) 
      pygame.display.flip() 
     elif event.key == pygame.K_DOWN: 
      screen.blit(background, (0,0)) 
      height = height + 10 
      screen.blit(my_image, [left_side, height]) 
      pygame.display.flip() 
     elif event.key == pygame.K_w: 
      screen.blit(background, (0,0)) 
      down_diagonal = down_diagonal - 10 
      screen.blit(person, [diagonal, down_diagonal]) 
      pygame.display.flip() 
     elif event.key == pygame.K_a: 
      screen.blit(background, (0,0)) 
      diagonal = diagonal - 10 
      screen.blit(person, [diagonal, down_diagonal]) 
      pygame.display.flip() 
     elif event.key == pygame.K_s: 
      screen.blit(background, (0,0)) 
      down_diagonal = down_diagonal + 10 
      screen.blit(person, [diagonal, down_diagonal]) 
      pygame.display.flip() 
     elif event.key == pygame.K_d: 
      screen.blit(background, (0,0)) 
      diagonal = diagonal + 10 
      screen.blit(person, [diagonal, down_diagonal]) 
      pygame.display.flip() 

pygame.quit() 

EDIT: Я пересмотрел свой код, как вы сказали, но он все еще не работает для меня. (Я снова прошу прощения за эти вопросы, поскольку я очень новичок в Python). Я был бы бесконечно благодарен за помощь.

import pygame 

#set up the initial pygame window 
pygame.init() 
screen = pygame.display.set_mode([900,600]) 

#set background color 
background = pygame.Surface(screen.get_size()) 
background.fill([204,255,229]) 
screen.blit(background, (0,0)) 

#Pull in the image to the program 
my_image = pygame.image.load("google_logo.png") 

#copy the image pixels to the screen 
screen.blit(my_image, [x, y]) 

#Display changes 
pygame.display.flip() 

keys = {'right':False, 'up':False, 'left':False, 'down':False} 

#set up pygame event loop 
running = True 
while running: 
for event in pygame.event.get(): 
    print event 
    if event.type == pygame.QUIT: 
      running = False 
    elif event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_q: 
      print "QUITTING NOW..." 
      pygame.time.delay(2000) 
      running = False 
     if event.key == pygame.K_h: 
      print "HELLO!" 
      pygame.time.delay(2500) 
      running = False 
     if event.key == pygame.K_c: 
      print "To move the original Google logo, use the arrow keys. To move the second logo, use the WASD keys." 
     if event.key == pygame.K_RIGHT: 
      keys['right'] = True 
     if event.key == pygame.K_UP: 
      keys['up'] = True 
     if event.key == pygame.K_DOWN: 
      keys['down'] = True 
     if event.key == pygame.K_RIGHT: 
      keys['right'] = True 
     if event.key == pygame.K_LEFT: 
      keys['left'] = True 
    elif event.type == pygame.KEYUP: 
     if event.key == pygame.K_RIGHT: 
      keys['right'] = False 
     if event.key == pygame.K_UP: 
      keys['up'] = False 
     if event.key == pygame.K_DOWN: 
      keys['down'] = False 
     if event.key == pygame.K_LEFT: 
      keys['left'] = False 

    x = 0 
    y = 0 

    if keys['right']: 
     x += 10 
    if keys['up']: 
     y += 10 
    if keys['down']: 
     y -=10 
    if keys['left']: 
     x -=10 

pygame.quit() 

ответ

0

Думаю, вам следует следить за нажатием клавиши и активировать ключ, а затем выполнять математику.

Первый набор это:

keys = {'right':False, 'up':False, 'left':False, 'down':False} 

Тогда на событие KEYDOWN установить ваш dict[key] в True:

if event.key == pygame.K_RIGHT: 
    keys['right'] = True 
if event.key == pygame.K_UP: 
    keys['up'] = True 
... 

И от типа события KEYUP делать то же самое, но установить keys[key] в False.

Затем в цикле событий:

x = 0 
y = 0 

if keys['right']: 
    x += 10 

if keys['up']: 
    y += 10 

.... 

А затем переместить объект с помощью x и y.

screen.blit(my_image, [x, y]) 

Теперь вы можете держать клавишу нажатой, и ваше изображение будет двигаться, и когда вы отпустите клавиши, это не остановит (нет необходимости повторно клавиш крана для перемещения)

EDIT:

import pygame 

#set up the initial pygame window 
pygame.init() 
screen = pygame.display.set_mode([900,600]) 

#set background color 
background = pygame.Surface(screen.get_size()) 
background.fill([204,255,229]) 
screen.blit(background, (0,0)) 

#Pull in the image to the program 
my_image = pygame.image.load("google_logo.png") 

#copy the image pixels to the screen 
screen.blit(my_image, [x, y]) 

#Display changes 
pygame.display.flip() 

keys = {'right':False, 'up':False, 'left':False, 'down':False} 
x = 0 
y = 0 
#set up pygame event loop 
running = True 
while running: 
    screen.blit(my_image, [x, y]) 
    pygame.display.flip() 
    for event in pygame.event.get(): 
     print event 
     if event.type == pygame.QUIT: 
       running = False 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_q: 
       print "QUITTING NOW..." 
       pygame.time.delay(2000) 
       running = False 
      if event.key == pygame.K_h: 
       print "HELLO!" 
       pygame.time.delay(2500) 
       running = False 
      if event.key == pygame.K_c: 
       print "To move the original Google logo, use the arrow keys. To move the second logo, use the WASD keys." 
      if event.key == pygame.K_RIGHT: 
       keys['right'] = True 
      if event.key == pygame.K_UP: 
       keys['up'] = True 
      if event.key == pygame.K_DOWN: 
       keys['down'] = True 
      if event.key == pygame.K_LEFT: 
       keys['left'] = True 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_RIGHT: 
       keys['right'] = False 
      if event.key == pygame.K_UP: 
       keys['up'] = False 
      if event.key == pygame.K_DOWN: 
       keys['down'] = False 
      if event.key == pygame.K_LEFT: 
       keys['left'] = False 

     x = 0 
     y = 0 

     if keys['right']: 
      x += 10 
     if keys['up']: 
      y += 10 
     if keys['down']: 
      y -=10 
     if keys['left']: 
      x -=10 

pygame.quit() 
+0

Большое вам спасибо за ваш вклад, поскольку это то, над чем я тоже пытался работать. Однако, когда я делаю, как вы говорите, в нем говорится, что я не определил «x и y» - как бы я это сделал? Извините, если это похоже на простой вопрос, я ОЧЕНЬ новичок в python, но я очень хочу учиться. Благодаря! –

+0

@SummerNguyen Я отредактировал свой ответ, сначала вам нужно установить x и y на 0. –

+0

Я только что опубликовал свой пересмотренный код, и я был бы очень признателен, если бы вы могли его рассмотреть. Еще раз спасибо за помощь, это много значит для меня. –