微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在 Pygame 中移动玩家对象时遇到问题

如何解决我在 Pygame 中移动玩家对象时遇到问题

我在 Pygame 中移动玩家对象时遇到问题。我已经创建了 Player 类并在我的主文件调用了它,但是每当我尝试移动播放器对象时它都不会移动。我也在游戏循环中调用了它,但它仍然不会移动。我不知道发生了什么:这是我到目前为止所做的代码

screen.py

import pygame

screen.py
class Screen:
    def __init__(self,width,height):
        self.width = width
        self.height = height

    def screen_display(self):
        return pygame.display.set_mode((self.width,self.height))

播放器.py

import pygame


class Player:
    playerY_change = 0.5
    def __init__(self,playerX,playerY,playerWidth,playerHeight,screen,):
        self.playerX = playerX
        self.playerY = playerY
        self.playerWidth = playerWidth
        self.playerHeight = playerHeight
        
        self.screen = screen
    def create_player(self):
        return pygame.draw.rect(self.screen,[0,0],[self.playerX,self.playerY,self.playerWidth,self.playerHeight])
    

enemy.py

import pygame


class Enemy:
    def __init__(self,enemyX,enemyY,enemyWidth,enemyHeight,screen):
        self.enemyX = enemyX
        self.enemyY = enemyY
        self.enemyWidth = enemyWidth
        self.enemyHeight = enemyHeight
        self.screen = screen

    def create_enemy(self):
        return pygame.draw.rect(self.screen,[self.enemyX,self.enemyY,self.enemyWidth,self.enemyHeight])
        

这是我的主文件 main.py:

import pygame,random,math
from screen import Screen
from player import Player
from enemy import Enemy

# Pygame initilaize
pygame.init()

#Game Screen
screenWidth = 800
screenHeight = 500
window = Screen(screenWidth,screenHeight)
screen = window.screen_display()

# Title and logo
pygame.display.set_caption("ShootBhoot")
icon = pygame.image.load("logo.png")
pygame.display.set_icon(icon)

# Player
playerX = 10

playerY = 10
playerY_change = 200
playerWidth = 15
playerHeight = 50

player = Player(playerX,screen)

#Enemy
enemyWidth = 15 
enemyHeight = 50
enemyX = screenWidth - (enemyWidth + 10)
enemyY = 10
enemy = Enemy(enemyX,screen)

# Ball
ballRadius = 10
ballX = random.randint(0,screenWidth - 10)
ballY = random.randint(0,screenHeight - 10)
ballX_change = 0.01
ballY_change = 0
def ball_create(screen,ballX,ballY,radius):
    return pygame.draw.circle(screen,(10,10,10),(ballX,ballY),radius)


def distance(playerX,ballY):
    calc = math.sqrt((playerX - ballX)**2 + (playerY - ballY)**2)
    print(calc)

#Game loop
running = True

while running:
    screen.fill((255,255,255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        #Even while I click btn It won't move
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                playerY_change = -0.5

            if event.key == pygame.K_DOWN:
                playerY_change = 0.5

    

    # Player Move Object not moving
    playerY = playerY_change


    enemy.create_enemy()
    ball_create(screen,ballRadius)
    player.create_player()
    pygame.display.flip()
    


    pygame.display.update()

解决方法

playerY 仅在创建 player 时使用。您必须更改播放器的坐标属性:

playerY = playerY_change

player.playerY += playerY_change

不过我建议使用 pygame.key.get_pressed() 而不是键盘事件。

键盘事件(参见 pygame.event 模块)仅在键的状态改变时发生一次。 KEYDOWN 事件在每次按下键时发生一次。 KEYUP 每次释放键时出现一次。将键盘事件用于单个操作或逐步移动。
pygame.key.get_pressed() 返回一个包含每个键状态的列表。如果某个键被按下,则该键的状态为 True,否则为 False。使用 pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动:

clock = pygame.time.Clock()
running = True
while running:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.playerY -= 1
    if keys[pygame.K_RIGHT]:
        player.playerY += 1

    screen.fill((255,255,255))
    enemy.create_enemy()
    ball_create(screen,ballX,ballY,ballRadius)
    player.create_player()
    pygame.display.flip()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。