Идентичные коды с разными результатами - PullRequest
1 голос
/ 11 июня 2019

В моей игре у меня есть два управляемых игроком танка. Оба танка имеют одинаковый код, но один изменил имена переменных. Два кода управления баком приведены ниже. Управление движением работает нормально, но это сила, которая не работает. Каким-то образом, какой бы ни был набор элементов управления танком первым, он работает. Пользователь должен использовать «o», «p» и «e», «r» для изменения мощности, но со вторым набором управляющего кода, даже с линиями keyup, мощность всегда будет меняться, а не оставаться на месте с пользователь отпускает ключ.

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

keys= pygame.key.get_pressed()

if keys[pygame.K_j]:
    tank1x -= tankmove
elif keys[pygame.K_l]:
    tank1x += tankmove
elif keys[pygame.K_i]:
    changeturret1 = 1
elif keys[pygame.K_k]:
    changeturret1 = -1
elif keys[pygame.K_u]:
    fire1(gun1,tank1x,tank1y,currentturretpos1,fire_power1)
elif keys[pygame.K_o]:
    power_change1 = -1
elif keys[pygame.K_p]:
    power_change1 = 1

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_i or event.key == pygame.K_k:
            changeturret1 = 0
        if event.key == pygame.K_o or event.key == pygame.K_p:
            power_change1 = 0

currentturretpos1 += changeturret1
if currentturretpos1 > 9:
    currentturretpos1 = 9
elif currentturretpos1 < 0:
    currentturretpos1 = 0

fire_power1 += power_change1
if fire_power1 > 100:
    fire_power1 = 100
elif fire_power1 < 1:
    fire_power1 = 1

message("Power: "+str(fire_power1)+"%",black,850,100)


if keys[pygame.K_a]:
    tankx -= tankmove
elif keys[pygame.K_d]:
    tankx += tankmove
elif keys[pygame.K_w]:
    changeturret = 1
elif keys[pygame.K_s]:
    changeturret = -1
elif keys[pygame.K_q]:
    fire(gun,tankx,tanky,currentturretpos,fire_power)
elif keys[pygame.K_e]:
    power_change = -1
elif keys[pygame.K_r]:
    power_change = 1

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_w or event.key == pygame.K_s:
            changeturret = 0
        if event.key == pygame.K_e or event.key == pygame.K_r:
            power_change = 0

currentturretpos += changeturret
if currentturretpos > 9:
    currentturretpos = 9
elif currentturretpos < 0:
    currentturretpos = 0

fire_power += power_change 
if fire_power > 100:
    fire_power = 100
elif fire_power < 1:
    fire_power = 1

message("Power: "+str(fire_power)+"%",black,0,100)

Пользователь должен использовать «e», «r» и «o», «p», чтобы изменить мощность, и когда они отпустят клавишу, мощность не изменится, но останется на уровне мощности.

1 Ответ

0 голосов
/ 11 июня 2019

Проблема в том, что у вас 2 цикла событий.Все события обрабатываются в первом цикле, но ключи pygame.K_w, pygame.K_s, pygame.K_e, pygame.K_r не обрабатываются в первом цикле событий.Второй цикл событий вообще не получит никаких событий (в основном).
Реализация 1 цикла событий в 1 игровом цикле!

Состояния, которые возвращаются pygame.key.get_pressed(), оцениваются, когда pygame.event s обрабатываются либо pygame.event.get(), либоpygame.event.pump().
Вызов pygame.key.get_pressed() после цикла события:

# the one and only event loop
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_i or event.key == pygame.K_k:
            changeturret1 = 0
        if event.key == pygame.K_o or event.key == pygame.K_p:
            power_change1 = 0
        if event.key == pygame.K_w or event.key == pygame.K_s:
            changeturret = 0
        if event.key == pygame.K_e or event.key == pygame.K_r:
            power_change = 0

# get the key states after 'pygame.event.get()'
keys = pygame.key.get_pressed()

if keys[pygame.K_j]:
    tank1x -= tankmove
elif keys[pygame.K_l]:
    tank1x += tankmove
elif keys[pygame.K_i]:
    changeturret1 = 1
elif keys[pygame.K_k]:
    changeturret1 = -1
elif keys[pygame.K_u]:
    fire1(gun1,tank1x,tank1y,currentturretpos1,fire_power1)
elif keys[pygame.K_o]:
    power_change1 = -1
elif keys[pygame.K_p]:
    power_change1 = 1

currentturretpos1 += changeturret1
if currentturretpos1 > 9:
    currentturretpos1 = 9
elif currentturretpos1 < 0:
    currentturretpos1 = 0

fire_power1 += power_change1
if fire_power1 > 100:
    fire_power1 = 100
elif fire_power1 < 1:
    fire_power1 = 1

message("Power: "+str(fire_power1)+"%",black,850,100)

if keys[pygame.K_a]:
    tankx -= tankmove
elif keys[pygame.K_d]:
    tankx += tankmove
elif keys[pygame.K_w]:
    changeturret = 1
elif keys[pygame.K_s]:
    changeturret = -1
elif keys[pygame.K_q]:
    fire(gun,tankx,tanky,currentturretpos,fire_power)
elif keys[pygame.K_e]:
    power_change = -1
elif keys[pygame.K_r]:
    power_change = 1

currentturretpos += changeturret
if currentturretpos > 9:
    currentturretpos = 9
elif currentturretpos < 0:
    currentturretpos = 0

fire_power += power_change 
if fire_power > 100:
    fire_power = 100
elif fire_power < 1:
    fire_power = 1

message("Power: "+str(fire_power)+"%",black,0,100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...