Game Maker - создание игр | HellRoom Games
Июль 13, 2025, 20:41:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Стрельба из дула оружия  (Прочитано 10494 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #15 : Декабрь 02, 2020, 11:46:18 »

У меня проект не открывается из-за того, что гмс2 не обновлен. Из того, что я увидел по файлам, я не увидели, чтобы Вы меняли image_yscale и point_direction Вы используете от x,y до mouse_x,mouse_y, а нужно наоборот.
Просто вставьте мой код в любой объект, вставьте туда название спрайта оружия и всё будет работать.
Записан
DSIYS
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 14


« Ответ #16 : Декабрь 02, 2020, 20:23:57 »

У меня проект не открывается из-за того, что гмс2 не обновлен. Из того, что я увидел по файлам, я не увидели, чтобы Вы меняли image_yscale и point_direction Вы используете от x,y до mouse_x,mouse_y, а нужно наоборот.
Просто вставьте мой код в любой объект, вставьте туда название спрайта оружия и всё будет работать.
В какое событие вставлять?
Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #17 : Декабрь 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);
Записан
DSIYS
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 14


« Ответ #18 : Декабрь 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);
Боги, я так благодарен, наконец всё получилось! Ну, почти. Хотелось бы ещё на последок узнать, как менять спрайт при нажатии на кнопку.
« Последнее редактирование: Декабрь 06, 2020, 13:28:29 от DSIYS » Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #19 : Декабрь 06, 2020, 15:23:10 »

Боги, я так благодарен, наконец всё получилось! Ну, почти. Хотелось бы ещё на последок узнать, как менять спрайт при нажатии на кнопку.
Смена спрайта:
Код:
sprite_index = нужный спрайт
Нажатие на кнопку:
Код:
if (keyboard_check_pressed(кнопка))
« Последнее редактирование: Декабрь 06, 2020, 15:38:04 от AndrewVideoGames » Записан
DSIYS
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 14


« Ответ #20 : Декабрь 06, 2020, 15:49:29 »

Боги, я так благодарен, наконец всё получилось! Ну, почти. Хотелось бы ещё на последок узнать, как менять спрайт при нажатии на кнопку.
Смена спрайта:
Код:
sprite_index = нужный спрайт
Нажатие на кнопку:
Код:
if (keyboard_check_pressed(кнопка))
*На кнопку мыши. Чтобы имитировать выстрел. У меня есть два спрайта: Спрайт мушкета без анимации и спрайт с анимацией выстрела. Когда я прописываю замену спрайта через sprite_index ничего не происходит. Я пишу это в событии Global left down.
Код:
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//блок следущего выстрела
}

Записан
ярик
Активный участник
*****

Репутация: 21
Offline Offline

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« Ответ #21 : Декабрь 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
}
Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
DSIYS
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 14


« Ответ #22 : Декабрь 07, 2020, 10:31:35 »

Кста, отличная идея, в событие нажатие пкм, написать код для проверки нажатии пкм.

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
Вот только проблема, с заменой спрайта при выстреле, всё ещё не решена.
« Последнее редактирование: Декабрь 07, 2020, 16:45:25 от DSIYS » Записан
ярик
Активный участник
*****

Репутация: 21
Offline Offline

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« Ответ #23 : Декабрь 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;
                }
            }
        }
    }
}
« Последнее редактирование: Декабрь 07, 2020, 23:24:12 от ярик » Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #24 : Декабрь 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;
                }
            }
        }
    }
}
Что это за дичь?
Записан
ярик
Активный участник
*****

Репутация: 21
Offline Offline

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« Ответ #25 : Декабрь 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} //Был еще код

Ну все, до свидание, пока.
Ты доволен, я доволен, и чел с вопросом доволен.
Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
DSIYS
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 14


« Ответ #26 : Декабрь 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)
Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #27 : Декабрь 08, 2020, 19:21:25 »

*На кнопку мыши. Чтобы имитировать выстрел. У меня есть два спрайта: Спрайт мушкета без анимации и спрайт с анимацией выстрела. Когда я прописываю замену спрайта через sprite_index ничего не происходит. Я пишу это в событии Global left down.
Код:
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//блок следущего выстрела
}
Делайте всё в Step и проверку реализуйте через if (mouse_check_button_pressed(mb_left)). Всё должно работать.
Записан
DSIYS
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 14


« Ответ #28 : Декабрь 08, 2020, 20:32:32 »

То есть вот так?
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//блок следующего выстрела
}
Делайте всё в Step и проверку реализуйте через if (mouse_check_button_pressed(mb_left)). Всё должно работать.

Добавлено: Декабрь 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 { //"Мы не стреляем"
?
У меня оружие и игрок два разных объекта
« Последнее редактирование: Декабрь 08, 2020, 20:47:18 от DSIYS » Записан
ярик
Активный участник
*****

Репутация: 21
Offline Offline

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« Ответ #29 : Декабрь 08, 2020, 21:24:50 »

._.

Короче, про мой код забыли.
И у меня к тебе вопрос. Как оружие узнает что оно стреляет?

---------------------------------------------------------------
Код:
var MousePressed = mouse_check_button(mb_left);
    if MousePressed = false { //"Мы не стреляем"
Первый код записывает в переменную "нажата ли мышка"
А второй код проверяет того что мышка не нажата
Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.129 секунд. Запросов: 29.