Четверг, 26 Декабря 2024, 08:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Почему не работает motion_set() (РЕШЕНО)
GameMakerBeginnerДата: Среда, 15 Апреля 2020, 14:46 | Сообщение # 1
был не раз
Сейчас нет на сайте
И снова надо обратиться на форум. Решил поработать с такими интересными штучками, как direction и speed. Сколько инфы не читай, а нигде толком не написано, как это работает.
В общем, есть у меня объект Candle (без физики). Я хочу, чтобы он двигался, например со скоростью 5 в направлении 290.
Не понятно почему, команда motion_set(dir, speed) не работает, хотя в ней всё, что мне нужно. Решил попробовать move_towards_point(x,y,speed). Опять же: пошёл я на фиг, ничего не робит. Уже и физику объекту дал, всё равно. Может у меня объект дефективный или что? Подскажите, пожалуйста


Сообщение отредактировал GameMakerBeginner - Суббота, 18 Апреля 2020, 02:52
UNIT02_GAMESДата: Четверг, 16 Апреля 2020, 08:51 | Сообщение # 2
частый гость
Сейчас нет на сайте
GameMakerBeginner, трудно сказать, что ты делаешь не так, потому что нет подробностей.

Как например делаю я в своей игре:

В Create:
friction = 0.5; // Трение, по простому говоря, нужно что бы объект мог останавливаться.

В Step:

"Тут на примере кнопка W, но ты сделаешь так как тебе нужно. Правда вместо motion_set, я использую motion_add. Мне так удобней"

if keyboard_check(ord('W'))
{
motion_add(290,5); // Направление 290 и скорость 5
}

speed = min(speed,5); // Ограничиваем скорость, иначе она будет постоянно увеличиваться.


///
GameMakerBeginnerДата: Суббота, 18 Апреля 2020, 02:51 | Сообщение # 3
был не раз
Сейчас нет на сайте
Короче, я полазил по глубине ваших интернетов и выяснил, что такие команды, как move_towards_point, motion_add, motion_set не будут работать при включенной в комнате физике. Это весь печально, потому что GMS 2 не может предложить вам ничего взамен этого. Тут я опустил руки. Но в моей голове ещё остался школьный курс тригонометрии и я могу даже поделиться своими наработками (вот инструкция) :
1) создаём скрипт phy_move_direction
2) внутри мы записываем вот это (все вычисления основаны на тригонометрии и проверены мной):

Код
if(argument0%90!=0) {

if(argument0<=180) a = 180 - argument0;
else a = argument0 - 180;

xpos  =  argument1/ sqrt((1/sqr(dcos(a)))-2*dsin(a));

ypos = dtan(a) * xpos;

if(argument0>90 and argument0<270 ) phy_speed_x = -xpos;
else phy_speed_x=xpos;
if(argument0>90 and argument0<270) {
if(argument0 < 180) phy_speed_y = -ypos;
else phy_speed_y= ypos;}
else {
    if(argument0 < 180) phy_speed_y = ypos;
else phy_speed_y= -ypos;}

}

else {

if(argument0==90) {phy_speed_y=-argument1;}
if(argument0==0) {phy_speed_x=argument1;}
if(argument0==270) {phy_speed_y=argument1;}
if(argument0==180) {phy_speed_x=-argument1;}

}


3) Чтобы вызвать команду, её надо запускать в событиях объекта, который вы собрались двигать (не забываем включить физику у объекта и в комнате)
4) как вы поняли, в скобках должно быть два аргумента: первый - это ваш угол движения, второй - это ваша скорость (теорема Пифагора, сложение phy_speed_x и phy_speed_y)
5) Если есть вопросы, спрашивайте
6) И ещё мне интересно, можно ли сделать легче. Напишите команду, которая делает это же с физическим объектом и вы услышите взрыв моего бензобака.
Raven84Дата: Понедельник, 20 Апреля 2020, 12:15 | Сообщение # 4
старожил
Сейчас нет на сайте
GameMakerBeginner, чего-то ты там намудрил через чур! :D
Для начала просто находим угол между двумя объектами:

Код
ang=point_direction(phy_position_x,phy_position_y,Hero.phy_position_x,Hero.phy_position_y)


А потом в событии шага (Step) меняем координаты x и y:

Код
phy_position_x+=lengthdir_x(f,ang)
phy_position_y+=lengthdir_y(f,ang)


, где f - это необходимая тебе скорость в пикселях.

Все! Тут три строчки кода достаточно. :D
Пользуйся! B)


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг