Как я могу заставить этот квадрат переходить из стороны в сторону в PyGame - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь заставить этот квадрат пройти через мой экран и вернуться по пути, по которому он прошел, но он просто остается там, где он есть. Это столкновение двух операторов if, и я попытался использовать оператор break, но это просто остановило все.

if squareX < 100:
    squareX += 1
elif squareX > 900:
    squareX -= 1

Ответы [ 2 ]

0 голосов
/ 07 января 2019

В вашей игре есть состояние , которое описывает, в каком направлении движется ваш прямоугольник. Поэтому, когда вы выходите из экрана, это состояние изменяется.

Когда вы обновляете свою игру (что является одной из трех вещей, которые вы делаете в своем основном цикле: обрабатываете события, обновляете состояние игры, рисуете игру), вы смотрите на свое состояние и решаете, в каком направлении вы двигаете прямоугольник. , Затем вы проверяете, находится ли он вне экрана.

Вот минимальный пример:

import pygame

def main():
    screen = pygame.display.set_mode((400, 200))
    clock = pygame.time.Clock()
    rect = pygame.Rect(100, 100, 32, 32)
    direction = 1
    while True:
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                return

        rect.move_ip(direction * 3, 0)
        if not screen.get_rect().contains(rect):
            direction *= -1

        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, pygame.Color('dodgerblue'), rect)
        clock.tick(120)
        pygame.display.flip()

if __name__ == '__main__':
    main()

enter image description here

0 голосов
/ 06 января 2019

просто, сначала нужно понять, что такое класс спрайтов. следуйте следующему коду:

import pygame
class MovingSquare(pygame.sprite.Sprite):
    def __init__(self, location, speed):
        pygame.sprite.Sprite.__init__(self)
        image_surface = pygame.surface.Surface([30, 30])
        image_surface.fill([0,0,0])
        self.image = image_surface.convert()
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = location
        self.speed=speed
    def move(self):
        self.rect=self.rect.move(self.speed)
        if self.rect.right>screen.get_width() or self.rect.left<0:
            self.speed[0]=-self.speed[0]
pygame.init()
screen=pygame.display.set_mode([640, 480])
screen.fill([255, 255, 255])
x=5
y=0
squareX=MovingSquare([50, 50], [x, y])
clock=pygame.time.Clock()
running=True
while running:
    clock.tick(30)
    square.move()
    screen.blit(squareX.image, squareX.rect)
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
pygame.quit()

Единственная проблема в том, что он не стирает свои треки, поэтому я предлагаю вместо этого использовать файл изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...