简体   繁体   English

我的角色不会在python中移动

[英]My character won't move in python

This is the code I used. 这是我使用的代码。

import pygame, sys

from pygame.locals import *

pygame.init()

def game():

width, height = 1000, 600
screen = pygame.display.set_mode((width,height))
pygame.display.set_caption('My game far now :P') #This command allows you make a title.
background=pygame.image.load('AE.jpg')
background = pygame.transform.scale(background, (width,height))
screen.blit(background, (0,0))

#Load target image and player



player = pygame.image.load('little.png')
player = pygame.transform.scale(player, (40,40))
px,py = width/2,height/2
screen.blit(player, (px,py))

movex = movey = 0

#Running of the game loop

while True:
    screen.blit(background, (0,0))
    #screen.blit(target,targetpos)
    screen.blit(player, (px,py))
    pygame.display.update()


    #keyboard an/or mouse movements
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()


        elif event.type == pygame.KEYDOWN:
            if event.key == K_RIGHT:
                movex = 2
            if event.key == K_LEFT:
                movex = -2
            if event.key == K_UP:
                movey = -2
            if event.key == K_DOWN:
                movey = 2

        elif event.type == pygame.KEYUP:
            if event.key == K_RIGHT:
                movex = 0
            if event.key == K_LEFT:
                movex = 0
            if event.key == K_UP:
                movey = 0
            if event.key == K_DOWN:
                movey = 0

                px = px + movex
                py = py + movey




#Python 's way of running the main routine

if __name__=='__main__':
   game()

When I run the program it all starts right, the screen opens with background and player spawning in the middle of the screen, but when I try to move nothing happends, no errors nothing. 当我运行该程序时,一切都将正确开始,屏幕打开时显示背景,并且在屏幕中间生成播放器,但是当我尝试移动任何东西时,也没有错误。

Would apriciate any help I can get :) 会给我任何帮助:)

Thx for taking time to help me. 感谢您抽出时间来帮助我。

You seem to have code indentation problem in last two lines which may be causing the bug. 您似乎在最后两行中有代码缩进问题,这可能是导致错误的原因。

Your curent code is equivalent to this if code block: 如果代码块,您的当前代码与此等效:

    elif event.type == pygame.KEYUP:
        if event.key == K_RIGHT:
            movex = 0
        if event.key == K_LEFT:
            movex = 0
        if event.key == K_UP:
            movey = 0
        if event.key == K_DOWN # IF BLOCK STARTS
            movey = 0

            px = px + movex  # THIS FALLS IN THE PREVIOUS IF BLOCK
            py = py + movey

Correct code would be : 正确的代码是:

  elif event.type == pygame.KEYUP:
        if event.key == K_RIGHT:
            movex = 0
        if event.key == K_LEFT:
            movex = 0
        if event.key == K_UP:
            movey = 0
        if event.key == K_DOWN # IF BLOCK STARTS
            movey = 0          #IF BLOCK ENDS

  px = px + movex  # NOW THIS IS OUT OF THE IF BLOCK
  py = py + movey

Two problems. 两个问题。

  1. You don't render in your loop 您不会在循环中渲染
  2. You are updating the location only in the if statement. 您仅在if语句中更新位置。

fixed: 固定:

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

        elif event.type == pygame.KEYDOWN:
            # ...snip...

    # physics
    px += movex
    py += movey

    # drawing

    screen.blit(background, (0,0))
    screen.blit(player, (px,py))
    pygame.display.update()

Take this code, the movement is optimized. 以此代码为例,运动得到了优化。 Useles code removed. Useles代码已删除。 I hope you understand it ;) 我希望你能理解;)

import pygame, sys
from pygame.locals import *

pygame.init()
width, height = 1000, 600
screen = pygame.display.set_mode((width,height))
pygame.display.set_caption('My game far now :P')
background=pygame.image.load('AE.png')
background = pygame.transform.scale(background, (width,height))
player = pygame.image.load('little.png')
player = pygame.transform.scale(player, (40,40))
px,py = width/2,height/2
movex = movey = 0

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]: px -= 2
    if keys[pygame.K_RIGHT]: px += 2
    if keys[pygame.K_UP]: py -= 2
    if keys[pygame.K_DOWN]: py += 2

    screen.blit(background, (0,0))    
    screen.blit(player, (px,py))
    pygame.display.update()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM