Съемка нескольких пуль и изменение их положения нажатием клавиши - PullRequest
1 голос
/ 06 мая 2019

Я создаю игру типа SHMUP для своего собственного развлечения, и у меня были проблемы с тем, как я мог бы изменить положение «пуля» в другое фиксированное положение всякий раз, когда я нажимал клавишу, скажем, я хочу оскорбительный стиль игры ив обороне, я хотел визуальной разницы и решил закрыть дистанцию ​​пуль от игрока, но я не знаю, как, мне помочь?

Текущая ситуация:

class MainFire(pygame.sprite.Sprite):
    def __init__(self, x, y, filename, posx, posy):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(os.path.join(img_folder, filename)).convert()
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.centerx = x
        self.rect.bottom = y
        self.speedy = - 20
        posx += self.rect.centerx
        posy += self.rect.bottom

    def update(self):
        self.rect.y += self.speedy
        if self.rect.bottom < 0:
            self.kill()

class SubFire(pygame.sprite.Sprite):
    def __init__(self, x, y, filename, posx, posy):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(os.path.join(img_folder, filename)).convert()
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.centerx = x
        self.rect.bottom = y
        self.speedy = - 20
        posx += self.rect.centerx
        posy += self.rect.bottom

    def update(self):
        self.rect.y += self.speedy
        if self.rect.bottom < 0:
            self.kill()
        elif self.rect.left < -10:
            self.kill()
        elif self.rect.right > GAMEWIDTH:
            self.kill()

Я считаю, что если я исправлю posx и posy, то он, наконец, сработает, posx должен добавить x и integer как posy с y (задание новой позиции для пули, скорость уже установлена, проблема в том, «откуда появляется пистолет ине сама пуля ")

1 Ответ

1 голос
/ 06 мая 2019

Хорошо, во-первых, избавьтесь от этих отдельных классов для разных углов стрельбы.Как только мы узнаем все, что может отличаться для разных снимков (начальная позиция, скорость, изображение), мы можем создать для них 1 класс, передав эти параметры в функцию init ().Я назвал его Bullet(), когда все ваши классы Main_fire и sub_fire пропали, с ним легче работать.

def fire(self):
    #this is lv2 and the base needs to be changed, it gains the subfire then another subfire set
    mfl = Bullet(self.rect.centerx, self.rect.top, "Alessa_MF.png",-20,0)
    all_sprites.add(mfl)
    bullets.add(mfl)
    sfl = Bullet(self.rect.centerx, self.rect.top, "Alessa_SF.png",-15,2)
    all_sprites.add(sfl)
    bullets.add(sfl)
    mfr = Bullet(self.rect.centerx, self.rect.top,"Alessa_SF.png",-15,-2)
    all_sprites.add(mfr)
    bullets.add(mfr)
    sfr = Bullet(self.rect.centerx, self.rect.top,"Alessa_SF.png",-10,-2)
    all_sprites.add(sfr)
    bullets.add(sfr)
    #fire_sound.play()

class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y,filename,vx,vy):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(os.path.join(img_folder, filename)).convert()
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x-25
        self.speedy = vy
        self.speedx = vx

    def update(self):
        self.rect.y += self.vy
        self.rect.x += self.vx
        if self.rect.bottom < 0:
            self.kill()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...