如何在多个文件中为精灵图像正确添加键输入?

时间:2012-05-22 17:00:01

标签: python pygame

我创建了这个以移动精灵。我在一个不同的文件中设置了一个sprite图像(spritex,300)。运行程序并按向右或向左箭头时,没有移动。 spritex的值在打印函数

中更改

我已经通过添加打印功能来检查程序是否正在读取按键。我设置程序错了吗?


------运动功能文件

import pygame
import os, sys
from itertools import *
from oryxsprites import *
from oryxdisplay import *
spritex = 300
screen = pygame.display.set_mode((640, 640))

def movementsprite():   

    global spritex

    keys = pygame.key.get_pressed()

    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False

    if keys[pygame.K_RIGHT]:
              spritex += 10
              print spritex

    elif keys[pygame.K_LEFT]:              
              spritex -= 10
              print spritex

------显示功能文件---------------

import pygame
import itertools
from oryxsprites import *
from McharMovement import *
screen = pygame.display.set_mode((640, 640))
spritex = 300
def backgroundmain():
    movementsprite()

    backdrop = pygame.Rect(0, 0, 640, 640) 
    screen.fill((50,50,50))
    playingfeildwidth = (32, 608)
    playingfeildheight = (32, 608)

screen.blit(warrior1, (spritex, 320))

pygame.display.flip()

--------主文件------------------

import pygame
import os, sys
from itertools import *
from oryxsprites import *
from oryxdisplay import *
from McharMovement import *
running = True

while running:

    backgroundmain()
    pygame.display.set_caption('OryxGame')
    pygame.display.set_icon(grasstile)


    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False
             pygame.quit()

2 个答案:

答案 0 :(得分:0)

您的spritex变量超出其范围。您需要将其提供给movementsprite()函数。

global放在变量声明的前面可以解决这个问题

答案 1 :(得分:0)

将您的代码更改为:

spritex = 100

def movementsprite():
    global spritex  #I added this line
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False

    if keys[pygame.K_RIGHT]:
              spritex += 10
              print spritex

    elif keys[pygame.K_LEFT]:              
              spritex -= 10

应该可以正常工作

如果精灵仍然没有移动,那么当你调用你的函数来移动它时问题就出现了。你是怎么搬家的?您需要从def movementsprite():

中调用该移动函数

如果您想从另一个文件调用移动功能,请使用

from other_file import movement_func

甚至

from other_file import *

更新: 只需在运动函数return spritex

中添加一个return语句即可

然后在显示功能中,当您调用移动功能时,将线路更改为 spritex=movementfunction()

这将改变文件之间spritex的值。而且你不必将spritex全局放在移动函数的顶部。

希望我能帮忙! :)