agasi22
Пользователь
 
Репутация: 5
Offline
Пол: 
API: Game Maker 8.0 Pro
Сообщений: 82
+Black Metal Fan+
|
 |
« Ответ #15 : Апрель 12, 2011, 22:49:07 » |
|
да не) мне тетрадка привычнее)
|
|
|
Записан
|
|
|
|
Nikstorm
Посетитель

Репутация: 0
Offline
Пол: 
API: 8.0 Pro
Сообщений: 44
|
 |
« Ответ #16 : Апрель 17, 2011, 17:14:00 » |
|
Я так и начал с 0 урока в тетрадь всё конспектировать.И запоминается лучше,и под рукой.
Добавлено: Апрель 18, 2011, 10:11:41 Тут случаем ошибки нет?
move_towards_point(0,0,3) Тогда при нажатии клавиши <Вверх> игрок будет идти в точке (0,0) с скоростью 2 пикселя/кадр
|
|
|
Записан
|
|
|
|
RevolverOcelot
Посетитель

Репутация: 3
Offline
Пол: 
API: GameMaker Studio Free
Сообщений: 43
|
 |
« Ответ #17 : Июнь 04, 2011, 16:05:25 » |
|
У меня вопрос. В примере motion in platformer кусок кода в столкновении со стеной выглядит вот так x = xprevious; y = yprevious
if vspeed < 0 move_contact_solid(90, -vspeed); else move_contact_solid(270, vspeed);
vspeed = 0; // Что делает код мне понятно. Но мне непонятен один момент - если убрать if vspeed < 0 move_contact_solid(90, -vspeed); то hero не всегда будет долетать до блока над головой и не будет к нему крепиться. Собственно, вопрос. Почему он полностью не долетает до блока над головой, ведь код прописан при столкновении. Такое ощущение что герой не долетает до верхнего блока пикселей пять-шесть, а должен ведь долететь и столкнуться! Чутье подсказывает, что я что-то упустил и на самом деле тут все просто, но на данный момент объяснение найти не могу. Буду благодарен, если подскажете. (:
|
|
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #18 : Июнь 04, 2011, 17:04:15 » |
|
Почему он полностью не долетает до блока над головой, ведь код прописан при столкновении.
Потому что убран код if vspeed < 0 move_contact_solid(90, -vspeed); Он как раз заставляет объект вплотную приближаться к твердому объекту, который выше него (direction=90). -vspeed взято потому, что в данный момент скорость отрицательная, а в аргумент нужно записать положительное число. + к этому добавлен код x=xprevious; y=yprevious; - возвращает объект в координаты до столкновения, хотя зачем они здесь нужны, если при столкновении с твердым объектом это автоматически выполняется. Вообще этот код if vspeed < 0 move_contact_solid(90, -vspeed); else move_contact_solid(270, vspeed); можно было бы заменить на очень компактный вариант, исправно работающий в любом направлении (при условии, что передвижение построено на direction и speed) move_contact_solid(direction,speed); но учителю виднее 
|
|
|
Записан
|
|
|
|
RevolverOcelot
Посетитель

Репутация: 3
Offline
Пол: 
API: GameMaker Studio Free
Сообщений: 43
|
 |
« Ответ #19 : Июнь 05, 2011, 03:21:35 » |
|
Потому что убран код Я не совсем понятно выразил свои мысли. (: Я понимаю, что код именно для этого. Но Почему именно без кода объект не долетает до верхнего блока? Ведь он и без кода должен прилипать/сталкиваться с блоком над головой. А так остается пикселей 5-6 между ними и происходит столкновение.
|
|
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #20 : Июнь 05, 2011, 09:45:46 » |
|
Как бы это объяснить... Могу еще раз написать то же самое: При столкновении с твердым объектом объект автоматически возвращается в свои предыдущие координаты, где он был до столкновения, чтобы не "наехать" на этот твердый объект. + добавлен код x=xprevious; y=yprevious; - возвращает объект в предыдущие координаты, но он здесь не нужен, так как это уже происходит, как написано парой строк выше.
Всё это связано со скоростью. Скорость - это количество пикселов, через которые объект каждый шаг "перепрыгивает". Вот и получается, что в один момент объект находится здесь, в следующий момент уже на несколько пикселов в стороне - нет никаких промежуточных состояний. От этого и происходит "наезд" на объект, если тот не является твердым. Наезд на твердый объект совершить невозможно, поэтому нет иного выхода, как остаться в своих предыдущих координатах.
|
|
|
Записан
|
|
|
|
RevolverOcelot
Посетитель

Репутация: 3
Offline
Пол: 
API: GameMaker Studio Free
Сообщений: 43
|
 |
« Ответ #21 : Июнь 06, 2011, 06:23:52 » |
|
FanTom, спасибо, все понял. Действительно, недоглядел в прошлом посте, что При столкновении с твердым объектом объект автоматически возвращается в свои предыдущие координаты, где он был до столкновения
|
|
|
Записан
|
|
|
|
Serafim547
Новичок
Репутация: 0
Offline
API: 8.0 Pro
Сообщений: 2
|
 |
« Ответ #22 : Октябрь 07, 2011, 15:34:22 » |
|
Не подскажите как сделать чтобьект "всегда был повернут" в сторону мышки?
|
|
|
Записан
|
|
|
|
Q33
XD
GM Pro user
Репутация: 45
Offline
Пол:  Награды: ![За постоянность! [10 дней на форуме] За постоянность! [10 дней на форуме]](http://forum.hellroom.ru/awards/35b6e985f89cc9a79a2bbfdd216390ca_hellroomforum_time_tin.gif)
API: GameMaker Studio Master
Сообщений: 325
|
 |
« Ответ #23 : Октябрь 07, 2011, 15:39:28 » |
|
В степ пропиши: direction=point_direction (x,y,mouse_x,mouse_y)
|
|
|
Записан
|
|
|
|
DOOMAN
Посетитель

Репутация: 2
Offline
API: 8.0 Pro
Сообщений: 38
|
 |
« Ответ #24 : Октябрь 14, 2011, 19:33:25 » |
|
Спасибо за уроки. А то всё на кнопках и сидел :) у меня появился вопрос: А что если в коде move_bounce_solid(adv) (к примеру) заменить soild на имя объекта, то будет происходить рикошет только от объекта, чьё имя было указано?
|
|
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
API: GameMaker Studio Master
Сообщений: 5026
|
 |
« Ответ #25 : Октябрь 14, 2011, 19:40:03 » |
|
А что если в коде move_bounce_solid(adv) (к примеру) заменить soild на имя объекта, то будет происходить рикошет только от объекта, чьё имя было указано?
Такой функции нет. Только твёрдость/нетвёрдость. Рикошет будет от того объекта, столкновение с которым прописано в событии.
|
|
|
Записан
|
|
|
|
DOOMAN
Посетитель

Репутация: 2
Offline
API: 8.0 Pro
Сообщений: 38
|
 |
« Ответ #26 : Октябрь 14, 2011, 19:44:04 » |
|
А что если в коде move_bounce_solid(adv) (к примеру) заменить soild на имя объекта, то будет происходить рикошет только от объекта, чьё имя было указано?
Такой функции нет. Только твёрдость/нетвёрдость. Рикошет будет от того объекта, столкновение с которым прописано в событии. спасибо за ответ.
|
|
|
Записан
|
|
|
|
Serafim547
Новичок
Репутация: 0
Offline
API: 8.0 Pro
Сообщений: 2
|
 |
« Ответ #27 : Октябрь 26, 2011, 17:58:31 » |
|
В степ пропиши: direction=point_direction (x,y,mouse_x,mouse_y) Спс, а возможно ли установить скорость перемещения, допустим чтоб обьект перемещался на на 10 пикселей со стандартной скоростью а на 1 со скоростью 1/100 секунды?
|
|
|
Записан
|
|
|
|
Hummer
scio me nihil scire
GM Pro user
Репутация: 335
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) ![За лояльность! [+300 репутации] За лояльность! [+300 репутации]](http://forum.hellroom.ru/awards/8ff7443ce508760cfbf715910b3eb0b3_hellroomforum_good_copper.gif)  
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573
|
 |
« Ответ #28 : Октябрь 26, 2011, 18:36:09 » |
|
mp_linear_step(x,y,stepsize,checkall) Позволяет экземпляру объекта перемещаться прямо к указанной позиции (x,y). Размер шага указывается stepsize. Если экземпляр объекта уже в позиции, то он не переместится дальше. Если checkall - истина, то экземпляр объекта остановится при контакте с экземпляром любого объекта. Если - ложь, то он остановиться только при контакте с твёрдыми экземплярами объекта. Заметьте, что эта функция не предусматривает "объездов", если экземпляр встречает препятствие. В этом случае это просто терпит неудачу. Функция возвращает истину, если была достигнута целевая позиция.
То есть примерно mp_linear_step(mouse_x, mouse_y, point_distance(x, y, mouse_x, mouse_y)/100, 0)
|
|
|
Записан
|
Есть вещи, которые нельзя объяснить. Для всего остального есть Справка Рандом-рандом-рандомище (с)  C++ & OpenGL
|
|
|
Repkin
Участник
  
Репутация: 2
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: GML, учу HTML*.
Сообщений: 197
Successful day? Sit down for game-maker.
|
 |
« Ответ #29 : Ноябрь 12, 2011, 15:16:01 » |
|
У функции place_free есть родственники, которые действуют по тому же принципу ("имитируют" перемещение), но немного различаются. place_meeting(x,y,obj) - возвращает истину, если объект, "помещённый" в точку (x, y) сталкивается с экземпляром объекта obj. obj может быть специальным словом all или other или конкретным id.
Также есть хороший набор функций для других аспектов движения. move_bounce_solid(adv) - (от англ bounce - рикошет, отражение) - из перевода понятно, что эта функция заставляет рикошетить (отражаться) игрока. Суффикс -solid означает, что рикошет происходит только от твёрдых предметов. Аргумент adv отвечает за "продвинутое" использования (поверхности любого наклона). Обычно это пишут в событиях столкновения или шага.
move_outside_solid(dir,maxdist) - похоже на move_contact_solid, только экземпляр будет двигаться пока соприкасается с экземпляром твёрдого объекта (суффикс -solid). Такая же история с аргументами dir и maxdist
Здравствуйте мне очень нравятся ваши уроки по GML. Но у меня есть вопросы по некоторым функциям... я все в цитату возвел... 1) place_meeting(x,y,obj) я не понял , что значит возвращает истину?? Ну вообщем я понял, что это можно использовать вместо " Столкновение с объектом" к примеру if place_meeting (player.x,player.y,monstr) { global.hp-=10}... возможно же такое ??? объясните пожауйсто.. 2)move_bounce_solid(adv) - принципи я понял, что это основной рикошет... но вместо "adv" я так понял пишут объект ?? 3)move_outside_solid(dir,maxdist) будет двигаться пока соприкасается с экземпляром твёрдого объекта ... как это возможно?? если объект соприкасается с твердым объектом насколько я знаю он в нем останавливается тобишь в этом случае застрявает... эмм.. что за парадокс?  может быть я чегото не дочитал?
|
|
|
Записан
|
|
|
|
|