Python 指针不向上或向下移动,尽管使用了以前的和已经工作的代码

Python 指针不向上或向下移动,尽管使用了以前的和已经工作的代码,python,python-3.x,pygame,Python,Python 3.x,Pygame,已经尝试了一段时间,以查找以下代码的问题。我试着让指针像问题的标题一样上下移动,但它就是不动。欢迎任何和所有的帮助 暂停屏幕事件处理代码: for event in pygame.event.get(): # User did something if event.type == pygame.QUIT: # If user clicked close pygame.quit() sys.

已经尝试了一段时间,以查找以下代码的问题。我试着让指针像问题的标题一样上下移动,但它就是不动。欢迎任何和所有的帮助

暂停屏幕事件处理代码:

        for event in pygame.event.get(): # User did something

            if event.type == pygame.QUIT: # If user clicked close

                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:

                if event.key == pygame.K_UP or event.key == pygame.K_w:

                    self.pointer.moveUp()
                    print("Up we go")

                if event.key == pygame.K_DOWN or event.key == pygame.K_s:

                    self.pointer.moveDown()
                    print("Down we go")

                if event.key == pygame.K_RETURN:

                    self.selection = int(pointer.Pointer.getPosition(self.pointer))
                    print(str(pointer.Pointer.getPosition(self.pointer)))
                    return True

        return False
用于显示在同一位置显示指针的代码

        self.active_sprite_list.draw(screen)

        font = pygame.font.SysFont("serif", 25)
        text = []
        center_x = []
        center_y = []

        for counter in range(1,5):

            text.append(font.render(self.options[counter-1], True, constants.WHITE))
            center_x.append(150)
            center_y.append((counter * 120) - (text[counter-1].get_height() // 2) + (self.pointer.image.get_height() // 2))
            screen.blit(text[counter-1], [center_x[counter-1],center_y[counter-1]])

        pygame.display.flip()
参考菜单中指针上下移动的相同代码:

        for event in pygame.event.get(): # User did something

            if event.type == pygame.QUIT: # If user clicked close

                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:

                if event.key == pygame.K_UP or event.key == pygame.K_w:

                    self.pointer.moveUp()

                if event.key == pygame.K_DOWN or event.key == pygame.K_s:

                    self.pointer.moveDown()

                if event.key == pygame.K_RETURN:

                    self.selection = int(pointer.Pointer.getPosition(self.pointer))
                    #print(str(self.selection))
                    return True

###Some code later###

        screen.fill(constants.BLACK)
        font = pygame.font.SysFont("serif", 25)

        for counter in range(1,5):

            text = font.render(self.options[counter-1], True, constants.WHITE)
            center_x = 150
            center_y = (counter * 120) - (text.get_height() // 2) + (self.pointer.image.get_height() // 2)
            screen.blit(text, [center_x, center_y])

        self.active_sprite_list.draw(screen)

        pygame.display.flip()
在您提出建议之前,暂停屏幕已在此之前声明:

                    while notPaused == False:
                        #print("Received")

                        notPaused = pause.processEvents()
                        print(str(notPaused))
                        if firstTime == True:
                            self.pauseScreen.fill(constants.ABLACK)
                            pause.displayFrame(self.pauseScreen)
                            self.pauseScreen.set_alpha(128)
                            screen.blit(self.pauseScreen, [0,0])
                            firstTime = False
                        pause.displayFrame(self.pauseScreen)
                        clock.tick(60)
根据要求,以下是指针类中的MoveUp和MoveDown函数:

    def moveUp(self):

        if self.rect.y <= 120:

            self.rect.y = 480

        else:

            self.rect.y -= 120

    def moveDown(self):

        if self.rect.y >= 480:

            self.rect.y = 120

        else:

            self.rect.y += 120
def moveUp(自):
如果自校正y=480:
自校正y=120
其他:
自校正y+=120
正如所建议的,模块化/自包含的代码可以单独运行,只要您在保存的代码文件旁边的资源文件夹中有某种图像

import pygame, sys

"""
Global constants
"""

# Colors
ABLACK   = ( 0, 0, 0, 125)
BLACK    = (   0,   0,   0)
WHITE    = ( 255, 255, 255)
BLUE     = (   0,   0, 255)
YELLOW   = ( 255, 255,   0)

# Screen dimensions
SCREEN_WIDTH  = 800
SCREEN_HEIGHT = 600

class Pointer(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("Resources/Pointer.png")
        self.rect = self.image.get_rect()
        self.rect.x = 100
        self.rect.y = 120

    def moveUp(self):

        if self.rect.y <= 120:

            self.rect.y = 480

        else:

            self.rect.y -= 120

        print("Within pointer object moving up from ",self.rect.x,self.rect.y)

    def moveDown(self):

        if self.rect.y >= 480:

            self.rect.y = 120

        else:

            self.rect.y += 120

        print("Within pointer object moving up from ",self.rect.x,self.rect.y)

    def getPosition(self):

        self.position = self.rect.y / 120
        return self.position

class Pause(object):

    def __init__(self,screen):

        self.selection = 4
        self.options = ["Resume Game","Review Controls","Back to Menu","Quit"]

        self.active_sprite_list = pygame.sprite.Group()

        self.pointer = Pointer()
        self.active_sprite_list.add(self.pointer)

    def processEvents(self):

        for event in pygame.event.get(): # User did something

            if event.type == pygame.QUIT: # If user clicked close

                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:

                if event.key == pygame.K_UP or event.key == pygame.K_w:

                    self.pointer.moveUp()
                    print("Up we go")

                if event.key == pygame.K_DOWN or event.key == pygame.K_s:

                    self.pointer.moveDown()
                    print("Down we go")

                if event.key == pygame.K_RETURN:

                    self.selection = int(Pointer.getPosition(self.pointer))
                    print(str(Pointer.getPosition(self.pointer)))
                    return False

        return True

    def displayFrame(self,screen):

        self.active_sprite_list.draw(screen)

        for pointer in self.active_sprite_list:

            print("The y value of this pointer is:" + str(pointer.rect.y))

        font = pygame.font.SysFont("serif", 25)
        text = []
        center_x = []
        center_y = []

        for counter in range(1,5):

            text.append(font.render(self.options[counter-1], True, WHITE))
            center_x.append(150)
            center_y.append((counter * 120) - (text[counter-1].get_height() // 2) + (self.pointer.image.get_height() // 2))

            for pointer in self.active_sprite_list:

                print("The y value of this pointer is:" + str(pointer.rect.y))
            screen.blit(text[counter-1], [center_x[counter-1],center_y[counter-1]])

        for pointer in self.active_sprite_list:

            print("The y value of this pointer is:" + str(pointer.rect.y))

        pygame.display.flip()

pygame.init()

pygame.display.set_caption("Pause Error Finder")

size = [SCREEN_WIDTH, SCREEN_HEIGHT]
screen = pygame.display.set_mode(size)

Paused = True
clock = pygame.time.Clock()
pauseScreen = pygame.Surface(size,pygame.SRCALPHA,32)
pauseScreen.fill(ABLACK)
pause = Pause(screen)
pauseScreen.set_alpha(128)

Paused = pause.processEvents()
print(str(notPaused))
pause.displayFrame(pauseScreen)
screen.blit(pauseScreen, [0,0])

while Paused:

    notPaused = pause.processEvents()
    print(str(Paused))
    pause.displayFrame(pauseScreen)
    #screen.blit(pauseScreen, [0,0])
    clock.tick(60)
import pygame,sys
"""
全局常数
"""
#颜色
ABLACK=(0,0,0,125)
黑色=(0,0,0)
白色=(255,255,255)
蓝色=(0,0255)
黄色=(255,255,0)
#屏幕尺寸
屏幕宽度=800
屏幕高度=600
类指针(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“Resources/Pointer.png”)
self.rect=self.image.get_rect()
自校正x=100
自校正y=120
def移动(自):
如果自校正y=480:
自校正y=120
其他:
自校正y+=120
打印(“指针内对象从”,self.rect.x,self.rect.y向上移动)
def getPosition(自我):
自位置=自校正y/120
返回自我位置
类暂停(对象):
定义初始化(自身,屏幕):
自我选择=4
self.options=[“恢复游戏”、“查看控件”、“返回菜单”、“退出”]
self.active\u sprite\u list=pygame.sprite.Group()
self.pointer=pointer()
self.active\u sprite\u list.add(self.pointer)
def processEvents(自):
对于pygame.event.get()中的事件:#用户执行了某些操作
if event.type==pygame.QUIT:#如果用户单击关闭
pygame.quit()
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K\u UP或event.key==pygame.K\u w:
self.pointer.moveUp()
打印(“向上走”)
如果event.key==pygame.K_关闭或event.key==pygame.K_关闭:
self.pointer.moveDown()
打印(“向下走”)
如果event.key==pygame.K_返回:
self.selection=int(Pointer.getPosition(self.Pointer))
打印(str(Pointer.getPosition(self.Pointer)))
返回错误
返回真值
def显示框(自身,屏幕):
self.active\u sprite\u list.draw(屏幕)
对于self.active\u sprite\u列表中的指针:
打印(“此指针的y值为:”+str(pointer.rect.y))
font=pygame.font.SysFont(“serif”,25)
text=[]
中心x=[]
中心y=[]
对于范围(1,5)内的计数器:
text.append(font.render(self.options[counter-1],True,白色))
中心附加(150)
center_y.append((计数器*120)-(文本[counter-1].get_height()//2)+(self.pointer.image.get_height()//2))
对于self.active\u sprite\u列表中的指针:
打印(“此指针的y值为:”+str(pointer.rect.y))
屏幕.blit(文本[counter-1]、[center_x[counter-1]、center_y[counter-1])
对于self.active\u sprite\u列表中的指针:
打印(“此指针的y值为:”+str(pointer.rect.y))
pygame.display.flip()
pygame.init()
pygame.display.set_标题(“暂停错误查找器”)
大小=[屏幕宽度,屏幕高度]
screen=pygame.display.set_模式(大小)
暂停=真
clock=pygame.time.clock()
pauseScreen=pygame.Surface(大小,pygame.SRCALPHA,32)
暂停屏幕填充(ABLACK)
暂停=暂停(屏幕)
pauseScreen.set_alpha(128)
暂停=暂停。processEvents()
打印(str(未暂停))
pause.displayFrame(pauseScreen)
blit(pauseScreen[0,0])
暂停时:
notPaused=pause.processEvents()
打印(str(暂停))
pause.displayFrame(pauseScreen)
#blit(pauseScreen[0,0])
时钟滴答(60)

您的问题在主游戏循环中,首先,您的暂停屏幕到屏幕的提示被注释掉。读到这一点,指针似乎在成倍地移动(越来越近!)

它这样做的原因是您没有在循环的每个过程中更新pauseScreen。您的displayFrame会将您的指针添加到正确的位置,但上一帧和2帧之前的位置,以及。。。他们仍然在那里。通过移动线路

pauseScreen.fill(ABLACK)
pauseScreen.set_alpha(128)
并将它们放置在游戏循环中,暂停屏幕将在每帧重置一次,并且只显示最新的指针。以下是更新的游戏循环:

pygame.init()

pygame.display.set_caption("Pause Error Finder")

size = [SCREEN_WIDTH, SCREEN_HEIGHT]
screen = pygame.display.set_mode(size)

notPaused = False
clock = pygame.time.Clock()
pauseScreen = pygame.Surface(size,pygame.SRCALPHA,32)

pause = Pause(screen)

notPaused = pause.processEvents()
print(str(notPaused))
pause.displayFrame(pauseScreen)
screen.blit(pauseScreen, [0,0])

while not notPaused:

    notPaused = pause.processEvents()
    print(str(notPaused))
    pauseScreen.fill(ABLACK)
    pauseScreen.set_alpha(128)
    pause.displayFrame(pauseScreen)

    screen.blit(pauseScreen, [0,0])
    clock.tick(60)

首先,在我忘记之前,当您编写
(稍后编写一些代码)
时,最好不要包含不相关的代码,但如果这是一条注释
########
,这样如果有人出现,就会复制您的代码以开始查找您的问题,他们离让它从一开始就工作又近了一步。在回答你的问题时,我想我们需要看看
指针.MoveUp()
指针.MoveDown()
函数定义`来获得一个好主意。我已经添加了函数定义,并在以后的注释中更改了一些代码,感谢您对我的问题提出关注,我希望这将有助于为我提供答案。我假设您看到
print(“Up we go”)
的打印输出,这确保了