2014-11-28 1 views
0

Я прыгаю по учебникам, пытаясь успешно завершить свою первую игру. Я занимался тяжелым объектно-ориентированным подходом к управлению ресурсами, но я чувствовал, что это немного помутнение моего понимания, поэтому я перезапустил. У меня в настоящее время мой персонаж плавно перемещается по экрану со скоростью, которую мне нравится, моя проблема в том, что мой «цикл ходьбы» из трех изображений идет быстро, и я получаю постоянство эффекта видения на ногах моей маленькой курицы. Мне нужно замедлить его, до сих пор я смог добиться желаемого эффекта, появляясь при вызове часов после каждого цикла принятия решения, но я беспокоюсь, что это замедлит всю логику игры, так как я не уверен, часы более одного раза «замораживают» мое обновление игры во времени, пока персонаж решает двигаться. Я подумал, может быть, сделать какое-то уравнение, сравнивающее время на часах с временем на часах раньше, чтобы замедлить ключевые кадры цикла цикла. Любая помощь или предложения, есть ли более простой метод? Огромное спасибо.
импорт Pygame, SYS из pygame.locals импорта *Игрок перемещает правильную скорость по экрану, цикл ходьбы слишком велик, надеясь, что предложения будут выполнены правильно

pygame.init() 

#Contstants 
BLACK = (0, 0, 0) 
SCREENWIDTH = 300 
SCREENHEIGHT = 300 
game_running = True 
clock = pygame.time.Clock() 

#variables 
current = 0 
class Player(object): 
    def __init__(self): 
     self.avatar_front = pygame.image.load("chicken_front.png") 
     self.avatar_back = pygame.image.load("chicken_back.png") 
     self.avatar_right = pygame.image.load("chicken_right_stand.png") 
     self.avatar_left = pygame.image.load("chicken_left_stand.png") 
     self.avatar_left_walk = pygame.image.load("chicken_left_walk1.png") 
     self.avatar_left_walk2 = pygame.image.load("chicken_left_walk2.png")  
     self.avatar_right = pygame.image.load("chicken_right_stand.png") 
     self.avatar_right_walk = pygame.image.load("chicken_right_walk1.png") 
     self.avatar_right_walk2 = pygame.image.load("chicken_right_walk2.png") 
     self.position = [0, 0] 
     self.current_direction = self.avatar_front 

#SetUp 
myScreen = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT)) 
pygame.display.set_caption("Chicken Rush!") 
pygame.display.set_icon(pygame.image.load("chicken_front.png")) 
myPlayer = Player() 

while game_running: 

    myScreen.fill(BLACK) 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    #RIGHT HERE DETERMINES WHICH IMAGE TO DISPLAY FOR WALKING LEFT->This is the part I need to  #  slow down  
    keys_pressed = pygame.key.get_pressed()  
    if keys_pressed[K_LEFT] and myPlayer.position[0] >= 0: 
     if current == 0: 
      myPlayer.current_direction = myPlayer.avatar_left 
      current += 1 
     elif current == 1: 
      myPlayer.current_direction = myPlayer.avatar_left_walk 
      current += 1 
     elif current == 2: 
      myPlayer.current_direction = myPlayer.avatar_left_walk2 
      current = 0 
     myPlayer.position[0] -= 3 
    if keys_pressed[K_RIGHT] and myPlayer.position[0] < SCREENWIDTH - 32: 
     myPlayer.position[0] += 3 
    if keys_pressed[K_UP] and myPlayer.position[1] >= 0: 
     myPlayer.position[1] -= 3 
    if keys_pressed[K_DOWN] and myPlayer.position[1] < SCREENHEIGHT - 35: 
     myPlayer.position[1] += 3 

    myScreen.blit(myPlayer.current_direction, (myPlayer.position[0], myPlayer.position[1])) 

    pygame.display.update() 

    clock.tick(28) 

ответ

0

Похоже, вы могли бы использовать более длинный интервал, чтобы замедлить переходы изображения. Имейте в виду, что Вы должны будете играть со значением imageTransitionSpeed, чтобы получить его по своему вкусу, но что-то, как это должно помочь замедлить переход вниз:

#RIGHT HERE DETERMINES WHICH IMAGE TO DISPLAY FOR WALKING LEFT->This is the part I need to  #  slow down  
    imageTransitionSpeed = 10 
    keys_pressed = pygame.key.get_pressed()  
    if keys_pressed[K_LEFT] and myPlayer.position[0] >= 0: 
     if current == 0: 
      myPlayer.current_direction = myPlayer.avatar_left 
      current += 1 
     elif current == imageTransitionSpeed: 
      myPlayer.current_direction = myPlayer.avatar_left_walk 
      current += 1 
     elif current == (imageTransitionSpeed * 2): 
      myPlayer.current_direction = myPlayer.avatar_left_walk2 
      current = 0 
     else: 
      current += 1 
     myPlayer.position[0] -= 3 
    if keys_pressed[K_RIGHT] and myPlayer.position[0] < SCREENWIDTH - 32: 
     myPlayer.position[0] += 3 
    if keys_pressed[K_UP] and myPlayer.position[1] >= 0: 
     myPlayer.position[1] -= 3 
    if keys_pressed[K_DOWN] and myPlayer.position[1] < SCREENHEIGHT - 35: 
     myPlayer.position[1] += 3 

    myScreen.blit(myPlayer.current_direction, (myPlayer.position[0], myPlayer.position[1])) 

    pygame.display.update() 

    clock.tick(28) 
+0

что появился, чтобы дать мне те же результаты, когда я просто измененный elif current == 0, current == 10 и current == 20, он заканчивает блокировку изображения аватара, если я делаю что-либо, кроме текущего == 0, current == 1, current == 2, кажется, что мы были думая по тем же самым линиям, просто нужно понять, что разрушает его, реализуя его. Спасибо за ответ :) –

+0

Вы добавили инструкцию '' else: current + = 1'? –

+0

Нет, я поймал это прямо перед тем, как вы разместили его, и он исправил и делает то, что я хотел сделать сейчас. Спасибо за помощь. Я могу только предположить, что он застрял, потому что он не знал, что делать в значениях между моими «установленными кадрами», так как я пошел с elseif, но мы получили его работу. Еще раз спасибо. –