首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pygame Sprite未立即更新

Pygame Sprite未立即更新
EN

Stack Overflow用户
提问于 2017-01-30 04:32:48
回答 1查看 77关注 0票数 0

编辑:我已经修复了它,应该有一个自己的前面的返回invader_position_x

我在做一个太空入侵者游戏。然而,我遇到了一些奇怪的行为。

当我按键盘上的右键时,精灵不会移动,但在按住它几秒钟后,它会跳到右边界。

太空入侵者游戏使用的是类,这是主类:

代码语言:javascript
复制
# IMPORTS
import pygame, sys
from pygame.locals import *
import invader

pygame.init()
###################
#IMAGE SIZE AND FPS
width = 800
height = 600
fps = 30
fpsClock = pygame.time.Clock()
DISPLAY = pygame.display.set_mode((width,height))
#################

#OTHER VARIABLES
pygame.display.set_caption('space invaders!')
white = (225,225,225)# The colour white
invader_sprite = pygame.image.load("cross.png")
invader_lenght = 40
invader_position_x = 400
invader_position_y = 560
right_boundary = width- invader_lenght

keypress = ""
my_invader = invader.Invader(invader_position_x,right_boundary,keypress)# Initialising invader

while True: # main game loop
    DISPLAY.fill(white)
    DISPLAY.blit(invader_sprite,(invader_position_x,invader_position_y))
    keypress = pygame.key.get_pressed()
    invader_position_x=my_invader.invader_move(keypress,right_boundary,invader_position_x)
    print(invader_position_x)

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.update()
    fpsClock.tick(fps)

这是我在一个单独的文件中的侵略者类:

代码语言:javascript
复制
import pygame, sys
from pygame.locals import *

pygame.init()

class Invader():

    def __init__(self,invader_position_x,right_boundary,keypress):

        self.invader_position_x= invader_position_x        
        self.right_boundary=right_boundary
        self.keypress= keypress

    def invader_move(self,keypress,right_boundary,invader_position_x):
        if self.invader_position_x> right_boundary:#Right boundary
            invader_position_x=right_boundary-5
        if self.invader_position_x<0:
            invader_position_x= 5

        if keypress[K_RIGHT]:# right
            self.invader_position_x = self.invader_position_x+ 5

        elif keypress[K_LEFT]:# left
            self.invader_position_x =self.invader_position_x- 5

        return invader_position_x

那么修复这种奇怪行为的解决方案是什么呢?

EN

Stack Overflow用户

回答已采纳

发布于 2017-01-30 07:19:13

我认为问题是你有两个变量来保持位置。但我没有检查这一点--我修改了代码,使其更有条理,问题也消失了。

代码语言:javascript
复制
#!/usr/bin/env python3

import pygame

# --- constants ---

WIDTH = 800
HEIGHT = 600
FPS = 30

WHITE = (225, 225, 225)

# --- classes ---

class Invader():

    def __init__(self, x, y):

        self.image = pygame.image.load("cross.png")
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

    def draw(self, screen):
        screen.blit(self.image, self.rect)

    def update(self, screen_rect, keypress):#EDIT Replaced screen with screem_rect

        if keypress[pygame.K_RIGHT]:  # right
            self.rect.x += 15

        elif keypress[pygame.K_LEFT]: # left
            self.rect.x -= 15

        if self.rect.right > screen_rect.right: # right boundary
            self.rect.right = screen_rect.right

        if self.rect.left < screen_rect.left:
            self.rect.left = screen_rect.left

# --- main ---

# - init -

pygame.init()

screen = pygame.display.set_mode((WIDTH, HEIGHT))
screen_rect = screen.get_rect()

pygame.display.set_caption('space invaders!')

# - objects -

my_invader = Invader(400, 560)

# - mainloop -

fps_clock = pygame.time.Clock()

while True: # main game loop

    # - events -

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    keypress = pygame.key.get_pressed()

    # - updates -

    my_invader.update(screen_rect, keypress)

    # - draws -

    screen.fill(WHITE)
    my_invader.draw(screen)
    pygame.display.update()

    # - FPS -

    fps_clock.tick(FPS)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41925629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档