【问题标题】:Cant move sprite on screen [duplicate]无法在屏幕上移动精灵[重复]
【发布时间】:2021-04-22 17:04:24
【问题描述】:

精灵卡在左上角。按“wasd”时它会轻微移动。 我正在尝试制作 Mayhem/xPilot 的简单克隆。一个 2 人游戏,其中有 2 枚火箭可以互相击落。

我对编码和 python 还很陌生,如果你能获得 ELI5,我将不胜感激。 有其他人遇到过这个问题吗?

import pygame as pg
    import sys
    x, y = 0, 0
    
    
    class Rocket(pg.sprite.Sprite):
        def __init__(self, picture_path, x, y):
            super().__init__()
            self.image = pg.image.load(picture_path)
            self.image = pg.transform.scale(self.image, (120, 100))
            self.rect = self.image.get_rect()
            self.rect.x = 900
            self.rect.y = 400
            self.pressed_w = False
            self.pressed_a = False
            self.pressed_s = False
            self.pressed_d = False
            self.speed = 3
            self.gravity = False
    
        def update(self):
            self.rect.x = 0
            self.rect.y = 0
            if self.pressed_a and self.rect.left > 0:
                self.rect.x = self.speed
            if self.pressed_d and self.rect.right < width:
                self.rect.x = self.speed
            if self.pressed_s and self.rect.bottom < height:
                self.rect.y = self.speed
            if self.pressed_w and self.rect.top > 0:
                self.rect.y = -self.speed
            if self.gravity and self.rect.bottom < height:
                self.rect.y = self.speed
    
            self.rect.x += x
            self.rect.y += y
    
    
    
    
    
    
    pg.init()
    clock = pg.time.Clock()
    
    width = 1920
    height = 1080
    screen = pg.display.set_mode((width, height))
    background = pg.image.load("bg.jpg")
    
    
    #rocket
    player_rect = Rocket("rocket.png", x, y)
    rocket_group = pg.sprite.Group()
    rocket_group.add(player_rect)
    
    
    while True:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                pg.quit()
                sys.exit()
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_w:
                    player_rect.pressed_w = True
                    player_rect.gravity = False
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_s:
                    player_rect.pressed_s = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_d:
                    player_rect.pressed_d = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_a:
                    player_rect.pressed_a = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_w:
                    player_rect.pressed_w = False
                    player_rect.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_s:
                    player_rect.pressed_s = False
                    player_rect.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_d:
                    player_rect.pressed_d = False
                    player_rect.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_a:
                    player_rect.pressed_a = False
                    player_rect.gravity = True
    
        pg.display.flip()
        screen.blit(background, (0, 0))
        rocket_group.draw(screen)
        rocket_group.update()
        clock.tick(120)

【问题讨论】:

    标签: python pygame sprite


    【解决方案1】:

    问题出在update 方法中。该方法必须更改rect 属性的坐标。但是,您的方法不断设置self.rect.x = 0self.rect.y = 0
    update

    class Rocket(pg.sprite.Sprite):
        # [...]
    
        def update(self):
            if self.pressed_a:
                self.rect.x -= self.speed
            if self.pressed_d
                self.rect.x += self.speed
            if self.pressed_w
                self.rect.y -= self.speed
            if self.pressed_s
                self.rect.y += self.speed
            if self.gravity
                self.rect.y += self.speed
    
            if self.rect.left < 0: self.rect.left = 0  
            if self.rect.right > width: self.rect.right = width 
            if self.rect.top < 0: self.rect.top = 0  
            if self.rect.bottom > height: self.rect.bottom = height
    

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2015-05-17
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多