为什么我的移动代码在 pygame 中不起作用?

问题描述 投票:0回答:1

所以我尝试编写一段代码,让“敌人”移动到你身边。它一直有效,直到我添加了一些代码,按下按钮移动角色本身。我该如何解决这个问题? 我已将不起作用的代码以粗体显示。 这是完整的代码:


pygame.init()
font = pygame.font.SysFont('Arial', 15)
game = pygame.display.set_mode((800,600))
pygame.display.set_caption("Test lol")
enemy = pygame.image.load("SS Tree 1 Transparent.png")
player = pygame.image.load("SS RML.png")
player_x = 100
player_x2, player_y2 = player.get_size()
player_y = 400
enemy_x = 300
enemy_x2, enemy_y2 = enemy.get_size()
enemy_y = 400
enemy_velocity = 0
player_velocity = 0


while True:
    game.fill((255,0,0))
    game.blit(player, (player_x, player_y))
    game.blit(enemy, (enemy_x, enemy_y))
    enemy_velocity -= 0.1
    player_velocity -= 0.1
    if enemy_y >= 400-enemy_y2:
        enemy_velocity = 0
        enemy_y = 400-enemy_y2
    if player_y >= 400-player_y2:
        player_velocity = 0
        player_y = 400-player_y2
    if player_x > enemy_x:
        enemy_x += 0.1
    elif player_x < enemy_x:
        enemy_x -= 0.1
    if player_y < enemy_y and enemy_velocity == 0 and enemy_y == 400:
        enemy_velocity += 5
        
    keys = pygame.key.get_pressed()
    **if keys[pygame.K_LEFT]:
        print("r")
        player_x -= 1
    if keys[pygame.K_RIGHT]:
        player_x += 1
    if keys[pygame.K_UP] and player_y == 400:
        player_velocity = 5**
    enemy_y -= enemy_velocity
    player_y -= player_velocity
    pygame.display.flip()

我检查了另一个程序中相同代码的另一段代码,但没有发现任何差异。 那个程序正在运行。

python python-3.x pygame
1个回答
0
投票

我建议改进退出事件处理并包括一个时钟来管理帧速率:

import pygame
import sys

pygame.init()
font = pygame.font.SysFont('Arial', 15)
game = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Test lol")
enemy = pygame.image.load("/home/o/oOo/o/clojure-Clojure_prgLang_lispDialect_logo.png")
player = pygame.image.load("/home/o/oOo/o/c.a.r.-C.a.R_Circle-and-Ruler_logo.png")
player_x = 100
player_x2, player_y2 = player.get_size()
player_y = 400
enemy_x = 300
enemy_x2, enemy_y2 = enemy.get_size()
enemy_y = 400
enemy_velocity = 0
player_velocity = 0

clock = pygame.time.Clock()

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

    game.fill((255, 0, 0))
    game.blit(player, (player_x, player_y))
    game.blit(enemy, (enemy_x, enemy_y))

    if player_y < 400 - player_y2:
        player_velocity -= 0.1
    if enemy_y < 400 - enemy_y2:
        enemy_velocity -= 0.1

    if enemy_y >= 400 - enemy_y2:
        enemy_velocity = 0
        enemy_y = 400 - enemy_y2
    if player_y >= 400 - player_y2:
        player_velocity = 0
        player_y = 400 - player_y2

    if player_x > enemy_x:
        enemy_x += 0.1
    elif player_x < enemy_x:
        enemy_x -= 0.1

    if player_y < enemy_y and enemy_velocity == 0 and enemy_y == 400:
        enemy_velocity += 5

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= 1
    if keys[pygame.K_RIGHT]:
        player_x += 1
    if keys[pygame.K_UP] and player_y == 400 - player_y2:
        player_velocity = 5

    enemy_y -= enemy_velocity
    player_y -= player_velocity

    pygame.display.flip()
    clock.tick(60)
© www.soinside.com 2019 - 2024. All rights reserved.