Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame-为什么不是';我的形状不动吗?_Python_Animation_Pygame_Shape - Fatal编程技术网

Python Pygame-为什么不是';我的形状不动吗?

Python Pygame-为什么不是';我的形状不动吗?,python,animation,pygame,shape,Python,Animation,Pygame,Shape,我正在读一本名为《为绝对初学者编写更多Python编程》的书,我正试图在第27页(动画矩形)上编写代码,当然还有改进 我清楚地告诉pygame更改形状的x值,但它没有移动。我希望形状在屏幕上水平移动,到达另一端时旋转,反之亦然 代码如下: # Animated Rectangle # # Demonstrating the basics of ANIMATION!!! # # --------------------------------------------------- import

我正在读一本名为《为绝对初学者编写更多Python编程》的书,我正试图在第27页(动画矩形)上编写代码,当然还有改进

我清楚地告诉pygame更改形状的x值,但它没有移动。我希望形状在屏幕上水平移动,到达另一端时旋转,反之亦然

代码如下:

# 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
删除所有内容。
有人试图修改我的语法,我喜欢这样,至少你能理解。
-也许你喜欢,但我们不能理解你:)“我们不能理解你”