Название: Стрельба из дула оружия Отправлено: DSIYS от Ноябрь 29, 2020, 12:31:47 Возникла проблема с реализацией оружия:выстрел происходит из "точки крепления". Ещё бы хотелось узнать, как сделать поворот(отражение) спрайта при определенном повороте мыши.
P.s. Жанр не совсем TDS, просто кроме платформеров и TDS тут ничего нет. Оружие: Global left down if (mouse_check_button(mb_left)) { sprite_index= MushketAtack; image_speed=1.5; } if cd=1{ instance_create_depth(x,y,-1,Obj_Bu); alarm[0]= shooting_speed; cd=0; } End step x=Obj_Player.x+10; y=Obj_Player.y; Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Ноябрь 29, 2020, 13:10:00 Используйте lengthdir_x и lengthdir_y – прибавляйте их к координатам при создании пули, первым аргументом (длина) будет расстояние от центра до дула, а вторым (направление) угол направления от центра до дула.
Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Ноябрь 29, 2020, 15:06:19 Используйте lengthdir_x и lengthdir_y – прибавляйте их к координатам при создании пули, первым аргументом (длина) будет расстояние от центра до дула, а вторым (направление) угол направления от центра до дула. Благодарю,поискал информацию по lengthdir_x и lengthdir_y и нашёл решение. А что на счёт отражения спрайта? К примеру, я поворачиваю мушкет назад и по идее, он должен перевернутся по оси x. Как можно сделать так, чтобы он с определённого угла зеркально отражался?Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Ноябрь 29, 2020, 18:38:49 Как можно сделать так, чтобы он с определённого угла зеркально отражался? Пока что я не очень понял что имеется ввиду в отражении с определённого угла, но используйте image_xscale (1 обычное состояние, -1 отраженное по горизонтали) и image_yscale (1 обычное состояние, -1 отраженное по вертикали).Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Ноябрь 30, 2020, 20:08:19 Как можно сделать так, чтобы он с определённого угла зеркально отражался? Пока что я не очень понял что имеется ввиду в отражении с определённого угла, но используйте image_xscale (1 обычное состояние, -1 отраженное по горизонтали) и image_yscale (1 обычное состояние, -1 отраженное по вертикали).Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 01, 2020, 09:44:12 Повернулась по каким направлениям? Вправо/влево и Вверх/Вниз? Или больше?
Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 01, 2020, 11:23:40 Повернулась по каким направлениям? Вправо/влево и Вверх/Вниз? Или больше? Если разделить картинку, что я прислал на 2 части по вертикали, то в правой половине мушкет будет смотреть в право, а в левой стороне он должен отразиться по оси x. т.е если спрайт заходит на левую половину (-x) то он должен зеркально отразитьсяНазвание: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 01, 2020, 13:14:38 Повернулась по каким направлениям? Вправо/влево и Вверх/Вниз? Или больше? Если разделить картинку, что я прислал на 2 части по вертикали, то в правой половине мушкет будет смотреть в право, а в левой стороне он должен отразиться по оси x. т.е если спрайт заходит на левую половину (-x) то он должен зеркально отразитьсяКод: image_xscale = sign(mouse_x - x); // если спрайт изначально повёрнут вправо, если влево, то sign(x - mouse_x) Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 01, 2020, 18:07:17 Теперь, когда я поворачиваю оружие в лево, оно не следит за мышью, а переворачивается.
Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 01, 2020, 18:14:10 Теперь, когда я поворачиваю оружие в лево, оно не следит за мышью, а переворачивается. Сформулируйте что вам нужно точнее. Кроме отражения и поворота направления я не представляю что можно сделать с оружием.Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 01, 2020, 19:25:29 Если честно, не знаю как описать ещё точнее.
Дуло оружия следит за мышью по этому коду: Код: image_angle=point_direction(x,y,mouse_x,mouse_y); Когда оружие поворачивается назад, то есть в левую сторону, то получается, что оно перевёрнуто(см. картинка 1). По этому коду, который вы мне скинули, оружие, когда я перевожу мышь в левую часть, оружие,а точнее его спрайт перестаёт следить за курсором и просто отражается зеркально (см. картинка 2 и 3). Код: image_xscale = sign(mouse_x - x); Я бы хотел сделать так, чтобы при повороте влево спрайт и следил за мышкой, и был перевёрнут. Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 01, 2020, 20:20:31 Работает без проблем (только поворачивать не по горизонтали, а по вертикали же нужно оружие):
Код: var gunX = x; var gunY = y; var gunAngle = point_direction(mouse_x, mouse_y, gunX, gunY); var gunScale = sign(gunX - mouse_x); draw_sprite_ext(sGun, 0, gunX, gunY, 1, gunScale, gunAngle, c_white, 1); Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 01, 2020, 21:47:56 Работает без проблем (только поворачивать не по горизонтали, а по вертикали же нужно оружие): Не получается. Скорее всего, чтобы это работало, я изначально должен был сделать всё по умному. Быть новичком в любой сфере не просто. Я скину проект во вложении в rar файле, если будет время и желание, может вы найдёте, в чём проблема.Код: var gunX = x; var gunY = y; var gunAngle = point_direction(mouse_x, mouse_y, gunX, gunY); var gunScale = sign(gunX - mouse_x); draw_sprite_ext(sGun, 0, gunX, gunY, 1, gunScale, gunAngle, c_white, 1); Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 01, 2020, 23:51:46 Экспортируйте проект через File -> Export
Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 01, 2020, 23:56:48 Экспортируйте проект через File -> Export Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 02, 2020, 11:46:18 У меня проект не открывается из-за того, что гмс2 не обновлен. Из того, что я увидел по файлам, я не увидели, чтобы Вы меняли image_yscale и point_direction Вы используете от x,y до mouse_x,mouse_y, а нужно наоборот.
Просто вставьте мой код в любой объект, вставьте туда название спрайта оружия и всё будет работать. Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 02, 2020, 20:23:57 У меня проект не открывается из-за того, что гмс2 не обновлен. Из того, что я увидел по файлам, я не увидели, чтобы Вы меняли image_yscale и point_direction Вы используете от x,y до mouse_x,mouse_y, а нужно наоборот. В какое событие вставлять? Просто вставьте мой код в любой объект, вставьте туда название спрайта оружия и всё будет работать. Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 02, 2020, 20:58:48 В какое событие вставлять? Step:Код: (Step) gunAngle = point_direction(mouse_x, mouse_y, x, y); gunScale = sign(x - mouse_x); Draw: Код: (Draw) draw_self(); draw_sprite_ext(sGun, 0, x, y, 1, gunScale, gunAngle, c_white, 1); Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 06, 2020, 13:05:33 В какое событие вставлять? Step:Код: (Step) gunAngle = point_direction(mouse_x, mouse_y, x, y); gunScale = sign(x - mouse_x); Draw: Код: (Draw) draw_self(); draw_sprite_ext(sGun, 0, x, y, 1, gunScale, gunAngle, c_white, 1); Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 06, 2020, 15:23:10 Боги, я так благодарен, наконец всё получилось! Ну, почти. Хотелось бы ещё на последок узнать, как менять спрайт при нажатии на кнопку. Смена спрайта:Код: sprite_index = нужный спрайт Нажатие на кнопку:Код: if (keyboard_check_pressed(кнопка)) Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 06, 2020, 15:49:29 Боги, я так благодарен, наконец всё получилось! Ну, почти. Хотелось бы ещё на последок узнать, как менять спрайт при нажатии на кнопку. Смена спрайта:Код: sprite_index = нужный спрайт Нажатие на кнопку:Код: if (keyboard_check_pressed(кнопка)) Код: if mouse_check_button(mb_left)//нажатие на лкм { sprite_index=MushketAtack//замена спрайта } if cd=1 //кулдаун использования оружия { instance_create_depth(x+lengthdir_x(-50,gunAngle),y+lengthdir_y(-50,gunAngle),1,Obj_Bu)//спавн пули alarm[0]= shooting_speed//скорость стрельбы cd=0//блок следущего выстрела } Название: Re: Стрельба из дула оружия Отправлено: ярик от Декабрь 06, 2020, 23:48:36 Кста, отличная идея, в событие нажатие пкм, написать код для проверки нажатии пкм.
GlobalLeftDown (или вроде GlobalLeftPressed) Код: sprite_index = MushketAtack//замена спрайта if cd = true { instance_create_depth(x+lengthdir_x(-50,gunAngle),y+lengthdir_y(-50,gunAngle),1,Obj_Bu) alarm[0] = shooting_speed cd = false } Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 07, 2020, 10:31:35 Кста, отличная идея, в событие нажатие пкм, написать код для проверки нажатии пкм. Прогрессивные технологии игростроя - требуют прогрессивного кода sm_good.GlobalLeftDown (или вроде GlobalLeftPressed) Код: sprite_index = MushketAtack//замена спрайта if cd = true { instance_create_depth(x+lengthdir_x(-50,gunAngle),y+lengthdir_y(-50,gunAngle),1,Obj_Bu) alarm[0] = shooting_speed cd = false } Добавлено: Декабрь 07, 2020, 16:45:25 Вот только проблема, с заменой спрайта при выстреле, всё ещё не решена. Название: Re: Стрельба из дула оружия Отправлено: ярик от Декабрь 07, 2020, 23:16:56 Короче, не смог я открыть твою магию, вот поэтому посмотрел код в .txt.
И я в шоке от увиденного. Короче, есть несколько вариантов Этот код в Step'е Код: if (not keyboard_check(ord("A") or ord("W") or ord("S") or ord("D"))){sprite_index=PlayerStay} То есть этот код не дает сработать твоему коду анимации стрельбы.Сделай проверку на нажатие пкм в верхнем коде. Также иди учи уроки по оптимизации кода и справку. Вот мини примерчик оптимизации: Код: var Up = keyboard_check(ord("W")); var Down = keyboard_check(ord("S")); var Left = keyboard_check(ord("A")); var Right = keyboard_check(ord("D")); var MousePressed = mouse_check_button(mv_left); if Up = false { if Down = false { if Left = false { if Right = false { if MousePressed = false { sprite_index = PlayerStay; } } } } } Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 08, 2020, 11:28:23 Вот мини примерчик оптимизации: Что это за дичь?Код: var Up = keyboard_check(ord("W")); var Down = keyboard_check(ord("S")); var Left = keyboard_check(ord("A")); var Right = keyboard_check(ord("D")); var MousePressed = mouse_check_button(mv_left); if Up = false { if Down = false { if Left = false { if Right = false { if MousePressed = false { sprite_index = PlayerStay; } } } } } Название: Re: Стрельба из дула оружия Отправлено: ярик от Декабрь 08, 2020, 11:53:55 Ой, извиняюсь.
Код: CREATE xx = 0 yy = 0 Spd1 = 4 //скорость игрока STEP var WalkY = keyboard_check(ord("W")) - keyboard_check(ord("S")); var WalkX = keyboard_check(ord("A")) - keyboard_check(ord("D")); var MousePressed = mouse_check_button(mb_left) if WalkY = 1 { //Движение по Y y -= Spd1 }else{ if WalkY = -1 { y += Spd1 } } if WalkX = 1 { //Движение по X x -= Spd1 }else{ if WalkX = -1 { x += Spd1 } } var Spd2 = point_distance(xx,yy,x,y); //speed не будет работать потому что мы передвигаемся через координаты if Spd2 = 0 { //Если расстояние между точками XxYy и XY = 0, то мы будем знать что перс остановился if MousePressed = false { //"Мы не стреляем" sprite_index = PlayerStay; //стоим } } xx = x //end code yy = y Теперь? (Я если что писал к его коду который нашел в файле): Код: if (not keyboard_check(ord("A") or ord("W") or ord("S") or ord("D"))){sprite_index=PlayerStay} //Был еще код Ну все, до свидание, пока. Ты доволен, я доволен, и чел с вопросом доволен. Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 08, 2020, 17:43:37 Ой, извиняюсь. Ну, не совсем. Код полностью выглядит вот так:Код: CREATE xx = 0 yy = 0 Spd1 = 4 //скорость игрока STEP var WalkY = keyboard_check(ord("W")) - keyboard_check(ord("S")); var WalkX = keyboard_check(ord("A")) - keyboard_check(ord("D")); var MousePressed = mouse_check_button(mb_left) if WalkY = 1 { //Движение по Y y -= Spd1 }else{ if WalkY = -1 { y += Spd1 } } if WalkX = 1 { //Движение по X x -= Spd1 }else{ if WalkX = -1 { x += Spd1 } } var Spd2 = point_distance(xx,yy,x,y); //speed не будет работать потому что мы передвигаемся через координаты if Spd2 = 0 { //Если расстояние между точками XxYy и XY = 0, то мы будем знать что перс остановился if MousePressed = false { //"Мы не стреляем" sprite_index = PlayerStay; //стоим } } xx = x //end code yy = y Теперь? (Я если что писал к его коду который нашел в файле): Код: if (not keyboard_check(ord("A") or ord("W") or ord("S") or ord("D"))){sprite_index=PlayerStay} //Был еще код Ну все, до свидание, пока. Ты доволен, я доволен, и чел с вопросом доволен. Step Код: if (keyboard_check(ord("D"))) //В право, спрайт меняется на бег в право { x+=2; sprite_index=PlayerRun; image_xscale = 1; } if keyboard_check(ord("A")) //В лево, спрайт отражается зеркально { x-=2; sprite_index=PlayerRun; image_xscale =-1; } if keyboard_check(ord("W")) { y-=2; sprite_index=PlayerRun; } if (keyboard_check(ord("S"))) { y+=2; sprite_index=PlayerRun; } if (not keyboard_check(ord("A") or ord("W") or ord("S") or ord("D"))){sprite_index=PlayerStay}// Спрайт меняется на стояние mask_index = HitBoxMan; //объект маска object_get_mask(HitBoxMan) Название: Re: Стрельба из дула оружия Отправлено: AndrewVideoGames от Декабрь 08, 2020, 19:21:25 *На кнопку мыши. Чтобы имитировать выстрел. У меня есть два спрайта: Спрайт мушкета без анимации и спрайт с анимацией выстрела. Когда я прописываю замену спрайта через sprite_index ничего не происходит. Я пишу это в событии Global left down. Делайте всё в Step и проверку реализуйте через if (mouse_check_button_pressed(mb_left)). Всё должно работать.Код: if mouse_check_button(mb_left)//нажатие на лкм { sprite_index=MushketAtack//замена спрайта } if cd=1 //кулдаун использования оружия { instance_create_depth(x+lengthdir_x(-50,gunAngle),y+lengthdir_y(-50,gunAngle),1,Obj_Bu)//спавн пули alarm[0]= shooting_speed//скорость стрельбы cd=0//блок следущего выстрела } Название: Re: Стрельба из дула оружия Отправлено: DSIYS от Декабрь 08, 2020, 20:32:32 То есть вот так? Делайте всё в Step и проверку реализуйте через if (mouse_check_button_pressed(mb_left)). Всё должно работать.Step. Код: gunAngle = point_direction(mouse_x, mouse_y, x, y); gunScale = sign(x - mouse_x); if mouse_check_button_pressed(mb_left)//нажатие на лкм { sprite_index=MushketAtack//замена спрайта } if cd=true //кулдаун использования оружия { instance_create_depth(x+lengthdir_x(-50,gunAngle),y+lengthdir_y(-50,gunAngle),1,Obj_Bu)//спавн пули alarm[0]= shooting_speed//скорость стрельбы cd=false//блок следующего выстрела } Добавлено: Декабрь 08, 2020, 20:47:18 Ой, извиняюсь. К чему здесь:Код: CREATE xx = 0 yy = 0 Spd1 = 4 //скорость игрока STEP var WalkY = keyboard_check(ord("W")) - keyboard_check(ord("S")); var WalkX = keyboard_check(ord("A")) - keyboard_check(ord("D")); var MousePressed = mouse_check_button(mb_left) if WalkY = 1 { //Движение по Y y -= Spd1 }else{ if WalkY = -1 { y += Spd1 } } if WalkX = 1 { //Движение по X x -= Spd1 }else{ if WalkX = -1 { x += Spd1 } } var Spd2 = point_distance(xx,yy,x,y); //speed не будет работать потому что мы передвигаемся через координаты if Spd2 = 0 { //Если расстояние между точками XxYy и XY = 0, то мы будем знать что перс остановился if MousePressed = false { //"Мы не стреляем" sprite_index = PlayerStay; //стоим } } xx = x //end code yy = y Теперь? (Я если что писал к его коду который нашел в файле): Код: if (not keyboard_check(ord("A") or ord("W") or ord("S") or ord("D"))){sprite_index=PlayerStay} //Был еще код Ну все, до свидание, пока. Ты доволен, я доволен, и чел с вопросом доволен. Код: var MousePressed = mouse_check_button(mb_left) ?if MousePressed = false { //"Мы не стреляем" У меня оружие и игрок два разных объекта Название: Re: Стрельба из дула оружия Отправлено: ярик от Декабрь 08, 2020, 21:24:50 ._.
Короче, про мой код забыли. И у меня к тебе вопрос. Как оружие узнает что оно стреляет? --------------------------------------------------------------- Код: var MousePressed = mouse_check_button(mb_left); Первый код записывает в переменную "нажата ли мышка"if MousePressed = false { //"Мы не стреляем" А второй код проверяет того что мышка не нажата |