Воскресенье, 13 Октября 2024, 19:58

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Трение в gms.
Just1uckyДата: Вторник, 17 Июня 2014, 21:08 | Сообщение # 1
частый гость
Сейчас нет на сайте
Может кто поможет. Хочу сделать сенсорное управление . Допустим есть шарик и кнопка вверх. Для кнопки вверх написал код:
Код


with (obj_shar)   
     
{   
y-=13
}


Хотелось бы сделать силу трения. Для клавиатуры я знаю как делать, а именно делаю через код:
Код
if up {friction=0.4}else{friction=1};

Он работает. Для сенсорного не подходит.

P.S. хотя наверное правильней делать через Virtual Button.


Сообщение отредактировал Just1ucky - Вторник, 17 Июня 2014, 21:12
SpeRdKeaRДата: Вторник, 17 Июня 2014, 21:31 | Сообщение # 2
KillerReborn
Сейчас нет на сайте
Цитата Just1ucky ()
P.S. хотя наверное правильней делать через Virtual Button.

Именно. А вообще, что бы friction работал, надо через vspeed работать, а не через координаты


А звезды, будто мириады стрел,
Ловя на мушку силуэты снов.
Смеется и злорадствует любовь,
И мы с тобой попали в их прицел...
XDominatorДата: Вторник, 17 Июня 2014, 23:11 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Начнем с того что friction - это воздействие на скорость, а не координаты. По сути, friction - это уменьшение speed каждый шаг на определенную заданную тобой величину. В свою очередь, speed - это совокупность горизонтальный и вертикальной проекций скорости, проще говоря - hspeed и vspeed. И потому, фактически, friction воздействует именно на них, а не на speed как таковую. Пропорции уменьшения значений этих проекций вычисляются через простейшие тригонометрические формулы, исходя из значения direction объекта. Короче, Склифасофский. Хочешь трения - просто в степе приближай к нулю(не уменьшай! Скорость может быть отрицательной) нужную тебе проекцию. Как то так smile

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
OverdraveДата: Среда, 18 Июня 2014, 10:27 | Сообщение # 4
частый гость
Сейчас нет на сайте
XDominator, прошу прощения, не знаю, как у вас в ГМ 8, но в ГМС ведь скорость - это отдельная величина, означающая изменение координат за один шаг в определенном направлении. Когда скорость равна, например, 10, hspeed и vspeed могут оставаться нулевыми, т.е. на эти величины изменение speed никакого влияния не несет.
Получается, что friction влияет именно на speed.
HaGeДата: Среда, 18 Июня 2014, 11:18 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Just1ucky, вы точно написали этот код самостоятельно, а не выдрали откуда попало? какое значение несет переменная "up"?

Цитата Overdrave ()
Получается, что friction влияет именно на speed.
а Земля плоская.
Just1uckyДата: Среда, 18 Июня 2014, 11:50 | Сообщение # 6
частый гость
Сейчас нет на сайте
Цитата HaGe ()
Just1ucky, вы точно написали этот код самостоятельно, а не выдрали откуда попало? какое значение несет переменная "up"?


up отвечает за трение вверх. То есть:
Код

if keyboard_check(ord('W')) || keyboard_check(vk_up) {up = true}else{up = false};

if speed < 8   
{    
if up {vspeed-=1};    
}    

if up {friction=0.4}else{friction=1};

Добавлено (18.06.2014, 11:50)
---------------------------------------------
Получилось написать код для сенсорного, а именно через Virtual Button:

Код

global.Up = virtual_key_add(97,385,80,80,vk_up);
draw_sprite(spr_button_up,true,97,385);


Но не очень понимаю как сделать трение.


Сообщение отредактировал Just1ucky - Среда, 18 Июня 2014, 11:48
XDominatorДата: Среда, 18 Июня 2014, 14:03 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Overdrave, перечитай внимательней мой пост. Speed - это лишь результат сложения векторов vspeed и hspeed. Направление результирующего вектора = direction, его длина - speed. Ты можешь задавать speed и direction напрямую - тогда ГМ рассчитает значения vspeed и hspeed исходя из speed и direction, т.е. произведет действия как бы в обратном порядке. Эти пары переменных взаимосвязаны, их нельзя разделить. Friction действует на speed, по факту - просто выполняет код speed -= friction(обычная скорость не может быть отрицательной, в отличии от проекций. Если гамак обнаруживает отрицательную скорость, то он просто выполняет прибавку 180 градусов к direction, т.е. как бы разворачивает объект.). Простейшая геометрия.

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
aFriendДата: Среда, 18 Июня 2014, 18:19 | Сообщение # 8
участник
Сейчас нет на сайте
Цитата Just1ucky ()
with (obj_shar)   
     
{   
y-=13
}


Код

with (obj_shar)    
       
{    
y-=13*friction
}


Чем не трение?
XDominatorДата: Среда, 18 Июня 2014, 19:58 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Тогда уж скорее 13 - friction. Хотя в любом случае это бред smile

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
aFriendДата: Среда, 18 Июня 2014, 20:11 | Сообщение # 10
участник
Сейчас нет на сайте
XDominator, мне кажется, что friction в процентах измеряется, и я не понимаю в каком месте это бред
XDominatorДата: Среда, 18 Июня 2014, 23:45 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Тебе кажется. friction - это число, которое просто пошагово вычитается из скорости. И поэтому указанное тобой трение - это не совсем трение, а нечто другое, и явно не то о чем спрашивал автор изначально.

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
HaGeДата: Четверг, 19 Июня 2014, 10:04 | Сообщение # 12
постоянный участник
Сейчас нет на сайте
трение реализуется просто. в событии, например, движения вправо пишем:
Код
hspeed=4;

и там же:
Код
friction=0.5;


таким образом при нажатии соответствующей клавиши игрок начнет двигаться вправо. если ее отпустить, то от модуля hspeed будет постепенно отниматься 0.5 до тех пор, пока значение скорости не будет равняться нулю. если движение осуществляется не посредству hspeed или vspeed, то friction работать не будет.

чем еще помочь автору, не знаю. в таких ситуациях без исходника ничем не помогу.
XDominatorДата: Четверг, 19 Июня 2014, 14:22 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
В твоем примере, friction будет в полной мере отниматься от hspeed только если не будет вертикальной составляющей. friction все таки отнимается от speed, а hspeed и vspeed рассчитываются уже по измененной speed. Хотя мне кажется автору такие тонкости вообще уже ни к чему)

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
HaGeДата: Четверг, 19 Июня 2014, 14:26 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
  • Страница 1 из 1
  • 1
Поиск:

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