微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从矢量方向拍摄

如何解决如何从矢量方向拍摄

我正在尝试让我的飞船从它的尖端射击。现在它从飞船上发射,但每当我移动时它就会跟着它。

我知道问题出在 Bullet 类中,但我不知道如何解决

我对编程还很陌生,所以请使用 ELI5。

将pygame导入为pg 导入系统 导入数学 从 pygame.math 导入 Vector2 x,y = 0,0

class Rocket(pg.sprite.Sprite):
    def __init__(self,pos=(1920/2,1080/2)):
        super().__init__()
        self.original_image = pg.image.load("rocket.png")
        self.original_image = pg.transform.scale(self.original_image,(120,100))
        self.image = self.original_image
        self.angle_change = 0
        self.angle = 0
        self.angle_speed = 0
        self.rect = self.image.get_rect(center = pos)
        self.position = Vector2(pos)
        self.direction = Vector2(1,0)
        #self.direction.rotate_ip(180)
        print(self.direction)
        #self.image = pg.transform.rotozoom(self.image,self.angle,1)
        self.pressed_w = False
        self.pressed_a = False
        self.pressed_space = False
        self.pressed_d = False
        self.speed = 2
        self.gravity = False
        self.rect.x += self.direction.x
        self.rect.y += self.direction.y

    def update(self):
        if self.pressed_w:
            self.rect.x += self.direction.x*self.speed
            self.rect.y += self.direction.y*self.speed
        if self.pressed_a:
            self.angle -= 2
            self.image = pg.transform.rotozoom(self.original_image,1)
            self.direction.rotate_ip(2)
        if self.pressed_d:
            self.angle += 2
            self.image = pg.transform.rotozoom(self.original_image,1)
            #endrer self.direction med antall grader i self.angle
            self.direction.rotate_ip(-2)
        if self.pressed_space:
            self.create_bullet()


        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
        if self.angle_speed != 0:
            # Rotate the direction vector and then the image.
            self.direction.rotate_ip(self.angle_speed)
            self.angle += self.angle_speed
            self.image = pg.transform.rotozoom(self.original_image,1)
            #self.new_rect = self.image.get_rect(center=self.image.get_rect(center=pos).center)
            #return self.image,self.new_rect

    def create_bullet(self):
        b = Bullet(self.direction,(self.rect.x,self.rect.y))
        bullet_group.add(b)
        return b
        #return Bullet(self.direction,self.rect.y))


class Bullet(pg.sprite.Sprite):
    def __init__(self,direction,center):
        super().__init__()
        self.image = pg.Surface((50,10))
        self.image.fill((255,0))
        self.rect = self.image.get_rect(center=center)
        self.direction = direction

    def update(self):
        self.rect.x += self.direction.x*5
        self.rect.y += self.direction.y*5


 


class Rocket1(pg.sprite.Sprite):
    def __init__(self,pos = (1920/2,1080/2)):
        super().__init__()
        self.image = pg.image.load("rocketflames.png")
        self.image = pg.transform.scale(self.image,100))
        self.angle_change = 0
        self.angle = 0
        self.angle_speed = 0
        self.rect = self.image.get_rect(center=pos)
        self.position = Vector2(pos)
        self.direction = Vector2(1,0)
        self.image = pg.transform.rotozoom(self.image,1)
        self.rect = self.image.get_rect()
        self.rot_image = 0
        self.new_rect = 0
        self.pressed_up = False
        self.pressed_left = False
        self.pressed_down = False
        self.pressed_right = False
        self.speed = 3
        self.gravity = False


    def update(self,1080/2)):
        if self.pressed_left:
            self.rect.x -= self.speed
        if self.pressed_right:
            self.rect.x += self.speed
        if self.pressed_up:
            self.rect.y -= self.speed
        if self.pressed_down:
            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

        if self.angle_speed != 0:
            # Rotate the direction vector and then the image.
            self.direction.rotate_ip(self.angle_speed)
            self.angle += self.angle_speed
            self.rot_image = pg.transform.rotate(self.image,self.angle)
            self.new_rect = self.rot_image.get_rect(center=self.rot_image.get_rect(center=pos).center)
            return self.rot_image,self.new_rect






pg.init()
clock = pg.time.Clock()

width = 1920
height = 1080
screen = pg.display.set_mode((width,height))
background = pg.image.load("bg.jpg")
pos = (width/2,height/2)


#rocket
player_rect = Rocket()
player_rect1 = Rocket1()
rotated_image = player_rect1.new_rect
obstacle = Obstacle
rocket_group = pg.sprite.Group()
rocket_group.add(player_rect,player_rect1)
bullet_group = pg.sprite.Group()
obstacle_group = pg.sprite.Group()

if __name__ == '__main__':

    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_d:
                    player_rect.pressed_d = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_SPACE:
                    player_rect.pressed_space = True
                    bullet_group.add(player_rect.create_bullet())
            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.KEYDOWN:
                if event.key == pg.K_SPACE:
                    player_rect.pressed_space = False
            if event.type == pg.KEYUP:
                if event.key == pg.K_d:
                    player_rect.pressed_d = False
            if event.type == pg.KEYUP:
                if event.key == pg.K_a:
                    player_rect.pressed_a = False

            ###
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_UP:
                    player_rect1.pressed_up = True
                    player_rect1.gravity = False
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_RIGHT:
                    player_rect1.angle_speed = 0.1
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_LEFT:
                    player_rect1.angle_speed = -0.1
            if event.type == pg.KEYUP:
                if event.key == pg.K_UP:
                    player_rect1.pressed_up = False
                    player_rect1.gravity = True
            if event.type == pg.KEYUP:
                if event.key == pg.K_RIGHT:
                    player_rect1.angle_speed = 0
            if event.type == pg.KEYUP:
                if event.key == pg.K_LEFT:
                    player_rect1.angle_speed = 0

        pg.display.flip()
        screen.blit(background,(0,0))
        rocket_group.draw(screen)
        bullet_group.draw(screen)
        obstacle_group.draw(screen)
        bullet_group.update()
        rocket_group.update()
        obstacle_group.update()
        clock.tick(120)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。