我创建了这个以移动精灵。我在一个不同的文件中设置了一个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()
答案 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
然后在显示功能中,当您调用移动功能时,将线路更改为
spritex=movementfunction()
这将改变文件之间spritex的值。而且你不必将spritex全局放在移动函数的顶部。
希望我能帮忙! :)