Стрельба пулями в пигме - PullRequest
       6

Стрельба пулями в пигме

0 голосов
/ 24 августа 2018

Я создаю свою собственную игру космических захватчиков, и до сих пор я мог перемещать свой корабль с помощью мыши.Тем не менее, я все еще не могу стрелять.Вот мой игровой цикл.

def game_loop():
    x=0
    y=0


    xlist=[]
    ylist=[]



    while True:


     mouseclk=pygame.mouse.get_pressed()

        game_display.fill(white)
        for event in pygame.event.get():

            if event.type==pygame.QUIT:
                pygame.quit()
                quit()


            x, y = pygame.mouse.get_pos()
            xlist.append(x)
            ylist.append(y)


            if x>=display_width-40:
                x=display_width-40

            if y>=display_height-48:
                y=display_height-48



            if pygame.mouse.get_focused()==0:
                game_display.blit(spaceship, (x, y))

            elif pygame.mouse.get_focused()==1:
                game_display.blit(spaceshipflames, (x, y))


            pygame.display.update()


            if pygame.mouse.get_focused()==0:
                pause()


        clock.tick(500)

Я пытался использовать следующий код внутри игрового цикла:

if mouseclk[0]==1:
        shoot.play()
        while True:    

            pygame.draw.circle(game_display, white, (x+20, y-2), 5)
            pygame.draw.circle(game_display, red, (x+20, y-7), 5)

            y-=5



            if y<=0:

                break

            pygame.display.update()
            clock.tick(400)

Но конечный результат очень глючный и не позволяет мнестрелять несколькими пулями, не делая игру прерывистой.

Есть ли способ запустить оба цикла одновременно или совершенно по-другому реализовать стрельбу?

1 Ответ

0 голосов
/ 24 августа 2018

Я бы порекомендовал использовать классы (особенно для игр) и разделить ваш код на более мелкие функции.

При создании игры каждый класс должен представлять некоторый тип объекта в игре, например, корабль или пулю здесь. Использование классов должно помочь с этой проблемой нескольких пуль вызывает сбои.

Разбиение на более мелкие функции значительно облегчит чтение и обновление кода по мере его роста. Старайтесь как можно больше придерживаться принципа одиночной ответственности .

Как вы могли бы реализовать съемку с учетом этих вещей:

bullets = []

class Bullet:
    def __init__(self, position, speed):
        self.position = position
        self.speed = speed

    def move(self):
        self.position[1] += self.speed

class Ship:
    def __init__(self, position, bullet_speed):
        self.position = position
        self.bullet_speed = bullet_speed

    def shoot(self):
        new_bullet = Bullet(self.position, self.bullet_speed)
        bullets.append(new_bullet)

Где position переменные имеют вид [x,y]. Затем, чтобы переместить ваши пули вперед, поместите эту строку где-нибудь в основной игровой цикл:

for bullet in bullets:
    bullet.move()

И переберите все маркеры и нарисуйте каждую на экране, чтобы отобразить их.

Это не самый подробный пример, но, надеюсь, этого достаточно, чтобы вы пошли в правильном направлении.

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