PyGame. стрельба

R_M

Новичок
Пользователь
Янв 10, 2021
24
1
3
Python:
from pygame import *
win_width = 1650
win_height = 950
display.set_caption('name')
window = display.set_mode((win_width, win_height))
background = transform.scale(image.load('background.png'), (win_width, win_height))

class GameSprite(sprite.Sprite):
    def __init__(self, img, width, height, x, y, speed):
        super().__init__()
        self.image = transform.scale(image.load(img), (width, height))
        self.image.set_colorkey([0, 255, 255])
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = speed
    def reset(self):
        window.blit(self.image, (self.rect.x, self.rect.y))
       
class Player(GameSprite):
    def __init__(self, img, width, height, x, y, speed, lives):
        GameSprite.__init__(self, img, width, height, x, y, speed)
        self.image = transform.scale(image.load(img), (width, height))
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = speed
        self.lives = lives
    def update(self):
        keys = key.get_pressed()
        if keys[K_LEFT] and self.rect.x > 20:
            self.rect.x -= self.speed
        if keys[K_RIGHT] and self.rect.x < 1140:
            self.rect.x += self.speed
        if keys[K_UP] and self.rect.y > 20:
            self.rect.y -= self.speed
        if keys[K_DOWN] and self.rect.y < 870:
            self.rect.y += self.speed
    def fire(self):
        bullet = Bullet('rock.png', 11, 11,self.rect.x, self.rect.y, 8)
        bullets.add(bullet)
       
       
#???????????
class Bullet(GameSprite):
    def __init__(self, img, width, height, x, y, speed):
        super().__init__(img, width, height, x, y, speed)
    def update(self):
        self.rect.y -= self.speed
        if self.rect.y < 50:
            self.kill()
player = Player('q.png', 60, 60, 350, 350, 5, 5)
bullets = sprite.Group()
game = True
while game:
    window.blit(background,(0, 0))

    player.reset()
    player.update()
    bullets.draw(window)
    bullets.update()


    display.update()

    for i in event.get():
        if i.type == QUIT:
            game = False
        if i.type == MOUSEBUTTONDOWN:
            if i.button == 1:
                player.fire()

Python:
        if i.type == MOUSEMOTION:
            print(mouse.get_pos())
помогите пожалуйста разобраться как записать второй код в первый
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
как сделать так, что бы снаряды летели именно туда где было нажатие
Вот пример:
Python:
import math

class Bullet(GameSprite):
    def __init__(self, img, width, height, x, y, speed):
        super().__init__(img, width, height, x, y, speed)
        # получаем координаты курсора
        mouse_x, mouse_y = mouse.get_pos()
        # вычисляем угол наклона траектории полета пули
        self.angle = math.atan2(mouse_y - y, mouse_x - x)

    def update(self):
        # перемещаем пулю по траектории
        self.rect.x += round(self.speed * math.cos(self.angle))
        self.rect.y += round(self.speed * math.sin(self.angle))

        # при выходе за пределы экрана удаляем
        if self.rect.x > win_width + 50 or self.rect.x < - 50:
            self.kill()
        if self.rect.y > win_height + 50 or self.rect.y < -50:
            self.kill()
 
  • Мне нравится
Реакции: R_M

R_M

Новичок
Пользователь
Янв 10, 2021
24
1
3
я не понимаю как сделать так, что бы снаряды летели именно туда где было нажатие
Python:
        if i.type == MOUSEBUTTONDOWN:
            if i.button == 1:
                player.fire()
                print(mouse.get_pos())
по крайней мере как получить координаты уже понятно, но как заствать снаряд лететь по ним
 

R_M

Новичок
Пользователь
Янв 10, 2021
24
1
3
спасибо вам огромное!!!
 

Форум IT Специалистов