
Вот код
from panda3d.core import Point3, Vec3
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.interval.IntervalGlobal import Sequence
from math import sin, cos, radians
class ShooterGame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# Настройка камеры
self.disableMouse()
self.camera.set_pos(0, -10, 2)
self.camera.look_at(0, 0, 0)
# Добавление земли
self.create_ground()
# Инициализация переменных
self.player_pos = Point3(0, 0, 0)
# Добавление игрока
self.create_player()
# Обработчик событий для управления
self.accept('arrow_left', self.move_left)
self.accept('arrow_right', self.move_right)
self.accept('arrow_up', self.move_forward)
self.accept('arrow_down', self.move_backward)
self.accept('space', self.shoot)
# Перемещение камеры
self.taskMgr.add(self.update_camera, "update_camera"
def create_ground(self):
ground = self.loader.loadModel("models/plane"
ground.reparent_to(self.render)
ground.set_scale(10, 10, 1)
ground.set_pos(0, 0, 0)
ground.set_color(0.2, 0.8, 0.2, 1) # зеленый цвет
ground.set_bin('ground', 0)
def create_player(self):
self.player = self.loader.loadModel("models/smiley"
self.player.reparent_to(self.render)
self.player.set_scale(0.5, 0.5, 0.5)
self.player.set_pos(self.player_pos)
def move_left(self):
self.player.set_x(self.player.get_x() - 0.1)
def move_right(self):
self.player.set_x(self.player.get_x() + 0.1)
def move_forward(self):
self.player.set_y(self.player.get_y() + 0.1)
def move_backward(self):
self.player.set_y(self.player.get_y() - 0.1)
def shoot(self):
bullet = self.loader.loadModel("models/smiley"
bullet.reparent_to(self.render)
bullet.set_scale(0.1, 0.1, 0.1)
bullet.set_pos(self.player.get_pos())
bullet.set_color(1, 0, 0, 1) # красный цвет
# Анимация пули
bullet.set_z(1) # Начальная высота
bullet_sequence = Sequence(
bullet.posInterval(1, Point3(bullet.get_x(), bullet.get_y() + 10, 1), startPos=bullet.get_pos()),
bullet.remove_node()
)
bullet_sequence.start()
def update_camera(self, task):
self.camera.look_at(self.player)
return Task.cont
if __name__ == "__main__":
game = ShooterGame()
game.run()