2016-12-31 5 views
0

Привет, я пытаюсь создать башни для игры Tower Defense, но каждый раз, когда я выбираю новую башню, старый удаляется. Я не хочу, чтобы это было удалено, и я уверен, что есть простой способ сделать это, но я не могу его найти. Вот мой код. Спасибо за любую помощь.pygame имеют несколько одинаковых изображений

def displayTower(): 
    global bx, by 
    click = pygame.mouse.get_pressed() 
    Background.blit(redTower, (mx-bx,my-by)) 
    Background.blit(redTower, (530,650)) 

while intro == 1: 
    mousePos = pygame.mouse.get_pos() 
    mousePressed = pygame.mouse.get_pressed() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 

     if 530 < mousePos[0] < 590 and 650 < mousePos[1] < 710: 
      if mousePressed[0] == 1: 
       clicked = True 
     if clicked == True: 
      mx, my = pygame.mouse.get_pos() 
      bx = 30 
      by = 30 
      if mousePressed[0] == 0: 
       Background.blit(redTower, (mx-bx,my-by)) 
       tx = mx - bx 
       ty = my - by 
       clicked = False 
displayTower() 

ответ

1

С одной стороны, вы вызываете displayTower() вне цикла while, поэтому он никогда не запускается. Таким образом, вы бьете только одну башню за раз, а не две.

Вы каждый раз должны разжечь весь экран или разбить его часть и обновить только исправления, на которые влияет изменение.

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

Для обеспечения безопасности, вы должны использовать внутреннюю поверхность, затем разбрызгивать ее по поверхности экрана, когда вы делаете блиты и рисунки. В любом случае, что должна содержать фоновая переменная? Экран или поверхность?

Итак, во-вторых, вы никогда не обновляете экран. Вы должны использовать либо pygame.display.flip(), либо pygame.display.update().

И, используйте события, чтобы получить положение мыши, это более умно. Также добавьте sleep или pygame.time.clock() для регулирования fps, это почти занятый цикл, который вы написали.

+0

Есть еще много кода, и displayTower() находится в цикле while в моем коде. Я просто ошибся при задании вопроса, и есть pygame.display.update() aswell –

+0

Yeh фон - это только карта для игры защиты башни –

+0

Начните с использования событий вместо вытаскивания состояния мыши. Затем вернитесь с лучшим кодом. Тогда вам также понадобится screen.blit (background, (0, 0)); pygame.display.flip() – Dalen