Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Godot, как исправить код стрельбы, но чтобы строго по горизонтали и вертикали относительно мыши

Лера Борисова Ученик (168), открыт 4 недели назад
Хочу сделать top down стрельбу, чтобы игрок поворачивался в направление, в которое стреляет, и чтобы пули выходили строго либо по горизонтале, либо по вертикале. Написала такой код, но пули не появляются. Вот значение двух переменных из скрипта:
var shoot_speed = 20
var bullet1 = preload("res://Unit/bullet_1.tscn")Переменную direction задать не могу, так как она используется для перемещения персонажа
2 ответа
Sergio 2.1 Оракул (67427) 4 недели назад
 func _input(event): 
if Input.is_action_just_pressed("shoot1"):
var b1 = bullet1.instantiate()
get_parent().add_child(b1) # Важно добавить пулю на сцену
b1.global_position = global_position # Устанавливаем позицию пули

var mouse_pos = get_global_mouse_position()
var diff = mouse_pos - global_position

# Определяем преобладающее направление (горизонталь или вертикаль)
if abs(diff.x) > abs(diff.y):
# Горизонтальное движение
if diff.x > 0:
b1.linear_velocity = Vector2(1, 0) * shoot_speed
rotation = 0 # Поворот вправо
else:
b1.linear_velocity = Vector2(-1, 0) * shoot_speed
rotation = PI # Поворот влево
else:
# Вертикальное движение
if diff.y > 0:
b1.linear_velocity = Vector2(0, 1) * shoot_speed
rotation = PI/2 # Поворот вниз
else:
b1.linear_velocity = Vector2(0, -1) * shoot_speed
rotation = -PI/2 # Поворот вверх
Лера БорисоваУченик (168) 4 недели назад
Спасибо больше, всё заработало. Я убрала повороты, так как крутит именно игрока, а не пули. Попробую повороты вписать в скрипт пули
мамa чoмy я です Профи (586) 4 недели назад
можно сделать проще:
 	if Input.is_action_just_pressed("shoot"): 
var b1 = bullet1.instantiate()
var direction = get_global_mouse_position() - self.global_position

if abs(direction.x) > abs(direction.y):
direction.y = 0
else:
direction.x = 0

get_parent().add_child(b1)
b1.global_position = self.global_position

b1.linear_velocity = sign(direction) * shoot_speed
Похожие вопросы