0

我创建了这个来移动精灵。我在不同的文件中将精灵图像坐标设置为(精灵,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()
4

2 回答 2

0

从外观上看,您的spritex变量超出了范围。您需要使其可用于该movementsprite()功能。

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

于 2012-05-22T17:14:49.197 回答
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

然后在 Display 函数中,当您调用移动函数时,将行更改为 spritex=movementfunction()

这将改变文件之间 spritex 的值。而且您不必在运动功能的顶部使 spritex 全局化。

希望我能帮上忙!:)

于 2012-05-22T19:40:54.417 回答