Python Pygame-为什么不是';我的形状不动吗?
我正在读一本名为《为绝对初学者编写更多Python编程》的书,我正试图在第27页(动画矩形)上编写代码,当然还有改进 我清楚地告诉pygame更改形状的x值,但它没有移动。我希望形状在屏幕上水平移动,到达另一端时旋转,反之亦然 代码如下:Python Pygame-为什么不是';我的形状不动吗?,python,animation,pygame,shape,Python,Animation,Pygame,Shape,我正在读一本名为《为绝对初学者编写更多Python编程》的书,我正试图在第27页(动画矩形)上编写代码,当然还有改进 我清楚地告诉pygame更改形状的x值,但它没有移动。我希望形状在屏幕上水平移动,到达另一端时旋转,反之亦然 代码如下: # Animated Rectangle # # Demonstrating the basics of ANIMATION!!! # # --------------------------------------------------- import
# Animated Rectangle
#
# Demonstrating the basics of ANIMATION!!!
#
# ---------------------------------------------------
import pygame, sys
from pygame.locals import *
WHITE = 255, 255, 255
GREEN = 0, 255, 255
# rectangle properties
COLOUR = GREEN
POS_X = 400 # position
POS_Y = 200
THICKNESS = 0
VELOCITY = 1
pygame.init()
SURFACE = pygame.display.set_mode((600, 500))
SURFACE.fill(WHITE)
pygame.display.set_caption("Animationing")
if POS_X > 400 or POS_X < 100:
VELOCITY = -VELOCITY
def draw(POS_X, VELOCITY):
pygame.draw.rect(SURFACE, COLOUR, (POS_X, POS_Y, 100, 100), THICKNESS)
POS_X -= VELOCITY # HERE IS THE SOURCE OF MY PROBLEM
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
draw(POS_X, VELOCITY)
编辑:有人试图修改我的语法。我喜欢这样,至少你能理解
编辑2:我的问题因离题而被搁置,因此我试图解决它。您遇到了问题,因为您对全局变量和局部变量使用了相同的名称
POS\u X
def draw(POS_X, VELOCITY):
这将创建局部变量POS\u X
def draw(POS_X, VELOCITY):
您可以在该函数中更改本地POS\u X
def draw(VELOCITY):
global POS_X
使用global
访问全局POS\u X
(在该功能之外创建)
然后叫它
draw(VELOCITY)
顺便说一句:有规则(PEP8):仅对诸如白色、绿色等常量值使用大写变量
编辑: 您的代码可能如下所示
import pygame, sys
from pygame.locals import *
#---------------------
# constants
WHITE = (255, 255, 255)
GREEN = ( 0, 255, 255)
#---------------------
# rectangle properties
color = GREEN
pos_x = 400 # position
pos_y = 200
thickness = 0
velocity = 1
#---------------------
# classes and functions
def move_player():
global pos_x, velocity
pos_x -= velocity
if pos_x > 400 or pos_x < 100:
velocity = -velocity
def draw_player():
pygame.draw.rect(screen, color, (pos_x, pos_y, 100, 100), thickness)
#---------------------
# GAME
pygame.init()
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Animationing")
# mainloop
running = True
while running:
# events
for event in pygame.event.get():
if event.type == QUIT:
running = False
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
# moves
move_player()
# move_enemy()
# collision detection - nothing yet
# draws
screen.fill(WHITE)
draw_player()
# draw_enemy()
pygame.display.update()
# clock - to keep constant speed - nothing yet
# quit
pygame.quit()
import pygame,sys
从pygame.locals导入*
#---------------------
#常数
白色=(255,255,255)
绿色=(0,255,255)
#---------------------
#矩形属性
颜色=绿色
位置x=400#位置
位置y=200
厚度=0
速度=1
#---------------------
#类和函数
def move_player():
全球位置x,速度
pos_x-=速度
如果位置x>400或位置x<100:
速度=-速度
def draw_player():
pygame.draw.rect(屏幕,颜色,(位置x,位置y,100,100),厚度)
#---------------------
#游戏
pygame.init()
screen=pygame.display.set_模式((600500))
pygame.display.set_标题(“动画化”)
#主回路
运行=真
运行时:
#事件
对于pygame.event.get()中的事件:
如果event.type==退出:
运行=错误
如果event.type==KEYDOWN:
如果event.key==K_转义:
运行=错误
#移动
移动_玩家()
#移动_敌人()
#碰撞检测-还没有
#吸引
屏幕填充(白色)
抽签
#抽签
pygame.display.update()
#时钟-保持恒定的速度-还没有
#退出
pygame.quit()
VELOCITY
也是全局的是的,VELOCITY
也是全局的,但在这个问题上它并不重要。谢谢,我明天会尝试它,很难记住所有的东西……我尝试过它,它有些效果,但现在当我在绘制矩形后尝试用白色填充曲面(使其看起来不太光滑)时,这个矩形没有显示出来(在绘制矩形后填充曲面?Fill()
用一种颜色填充曲面上的所有内容-Fill
删除所有内容。有人试图修改我的语法,我喜欢这样,至少你能理解。
-也许你喜欢,但我们不能理解你:)“我们不能理解你”