2015-02-22 4 views
0

Привет, ребята, у меня есть некоторые проблемы, пока я делал свою игру .... Я хочу переместить своего персонажа, пока изображение меняет каждый «шаг», который выглядит как анимация. . гаваньюPython/Pygame .. Trouble w/classes

Я работал над этим в течение нескольких часов, но единственное, что я делал до сих пор, чтобы переместить символ, но все изображения нарисованы сразу при перемещении

keys = pygame.key.get_pressed() 
if keys[pygame.K_LEFT]: 
    currentimageleft = 1 
    gamedisplay.blit(background, (0,0)) 
    if currentimageleft == 1: 
     gamedisplay.blit(temp1, (template_x, template_y), (g1x, g1y, box, box)) 
     template_x -= moveit 
     currentimageleft += 1 
    if currentimageleft == 2: 
     gamedisplay.blit(temp1, (template_x, template_y), (g2x, g2y, box, box)) 
     template_x -= moveit 
     currentimageleft += 1 
    if currentimageleft == 3: 
     gamedisplay.blit(temp1, (template_x, template_y), (g3x, g3y, box, box)) 
     template_x -= moveit 
     currentimageleft += 1 
    if currentimageleft == 4: 
     gamedisplay.blit(temp1, (template_x, template_y), (g4x, g4y, box, box)) 
     template_x -= moveit 
     currentimageleft = 1 
    pygame.display.update() 
+0

вот ссылка, чтобы посмотреть, как она выглядит: https://www.flickr.com/photos/[email protected]/ –

+0

Возможно ли, что вы просто добавили изменение на свой экран без освежающего фона? – frlan

+0

Не могли бы вы охарактеризовать немного больше, что вы подразумеваете, добавив смену изменений. –

ответ

0

Поскольку вы увеличиваете число currentimgeleft в каждом из своих блоков if, тогда он вызывает следующий блок if по строке. Вы хотите, чтобы каждый из них запускал каждый кадр, поэтому переключите if на elif для всех, кроме первого, и тогда вы будете иметь только один запуск при каждом нажатии кнопки K_LEFT на клавиатуре. Как так

if currentimageleft == 1: 
    # code 
elif currentimageleft == 2: 
    # code 
... 

Однако обратите внимание, что вы устанавливаете currentimageleft каждый раз при входе в большом if заявления для нажатия клавиши. Это гарантирует, что вы всегда закончите с использованием самого первого спрайта вашей анимации. Вы можете связать currentimageleft с переменной класса, объявив его в __init__ быть что-то вроде

def __init__(self, ...): 
    # other code, including possible parent constructors 
    self.currentleftimage = 1 
    # more code 

Вы бы затем получить доступ к переменной с self.currentimageleft вместо currentimageleft. Это позволит вам использовать или elif предложения об обнаружении нажатия кнопки (внешний if в вашем фрагменте кода), чтобы сбросить переменную self.currentleftimage обратно до 1, что позволяет вам отслеживать движение таким образом.

Вы также можете найти this other answer on the equivalent form of switch in Python, хотя несколько звонков в пункты elif также совершенно нормальны и могут привести к более разборчивому коду во многих случаях.

+0

Thx lot bro! Это сработало отлично !!!: D Не замечал что из-за «while-loop» он всегда возвращается к 1 T_T –

+0

@TofuDaydreamer. Вы очень желанны. Рад быть полезным. :) – BobChao87

1

использование elif для последующих сравнений, так что для каждой итерации выполняется только одна.

+0

теперь он движется вперед, но только с одним из изображений :( –