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

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Ссылки на события
  • Новый урок в школе GML: Апрель 10, 2011 - Апрель 13, 2011
Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Урок 2. Управление перемещением.  (Прочитано 56173 раз)
0 Пользователей и 1 Гость смотрят эту тему.
agasi22
Пользователь
***

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

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 82


+Black Metal Fan+


« Ответ #15 : Апрель 12, 2011, 22:49:07 »

да не) мне тетрадка привычнее)
Записан
Nikstorm
Посетитель
**

Репутация: 0
Offline 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 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 Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
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 Offline

Пол: Мужской
API: GameMaker Studio Free
Сообщений: 43


« Ответ #19 : Июнь 05, 2011, 03:21:35 »

Цитировать
Потому что убран код
Я не совсем понятно выразил свои мысли. (: Я понимаю, что код именно для этого. Но
Почему именно без кода объект не долетает до верхнего блока? Ведь он и без кода должен прилипать/сталкиваться с блоком над головой. А так остается пикселей 5-6 между ними и происходит столкновение.
Записан
Fantom
I am... All of me
Гл. Администратор
*

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

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #20 : Июнь 05, 2011, 09:45:46 »

Как бы это объяснить... Могу еще раз написать то же самое:
При столкновении с твердым объектом объект автоматически возвращается в свои предыдущие координаты, где он был до столкновения, чтобы не "наехать" на этот твердый объект.
+ добавлен код x=xprevious; y=yprevious; - возвращает объект в предыдущие координаты, но он здесь не нужен, так как это уже происходит, как написано парой строк выше.

Всё это связано со скоростью. Скорость - это количество пикселов, через которые объект каждый шаг "перепрыгивает".
Вот и получается, что в один момент объект находится здесь, в следующий момент уже на несколько пикселов в стороне - нет никаких промежуточных состояний.
От этого и происходит "наезд" на объект, если тот не является твердым. Наезд на твердый объект совершить невозможно, поэтому нет иного выхода, как остаться в своих предыдущих координатах.
Записан

RevolverOcelot
Посетитель
**

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

Пол: Мужской
API: GameMaker Studio Free
Сообщений: 43


« Ответ #21 : Июнь 06, 2011, 06:23:52 »

FanTom, спасибо, все понял. Действительно, недоглядел в прошлом посте, что
Цитировать
При столкновении с твердым объектом объект автоматически возвращается в свои предыдущие координаты, где он был до столкновения
Записан
Serafim547
Новичок
*

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

API: 8.0 Pro
Сообщений: 2


« Ответ #22 : Октябрь 07, 2011, 15:34:22 »

Не подскажите как сделать чтобьект "всегда был повернут" в сторону мышки?
Записан
Q33
XD
GM Pro user
*

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio Master
Сообщений: 325



WWW
« Ответ #23 : Октябрь 07, 2011, 15:39:28 »

В степ пропиши:
direction=point_direction (x,y,mouse_x,mouse_y)
Записан
DOOMAN
Посетитель
**

Репутация: 2
Offline 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 Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #25 : Октябрь 14, 2011, 19:40:03 »

А что если в коде move_bounce_solid(adv) (к примеру) заменить soild на имя объекта, то будет происходить рикошет только от объекта, чьё имя было указано?
Такой функции нет. Только твёрдость/нетвёрдость.
Рикошет будет от того объекта, столкновение с которым прописано в событии.
Записан

DOOMAN
Посетитель
**

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

API: 8.0 Pro
Сообщений: 38


« Ответ #26 : Октябрь 14, 2011, 19:44:04 »

А что если в коде move_bounce_solid(adv) (к примеру) заменить soild на имя объекта, то будет происходить рикошет только от объекта, чьё имя было указано?
Такой функции нет. Только твёрдость/нетвёрдость.
Рикошет будет от того объекта, столкновение с которым прописано в событии.
спасибо за ответ.
Записан
Serafim547
Новичок
*

Репутация: 0
Offline 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 Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #28 : Октябрь 26, 2011, 18:36:09 »

Цитата: Справка ГМ8
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 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) будет двигаться пока соприкасается с экземпляром твёрдого объекта ... как это возможно?? если объект соприкасается с твердым объектом насколько я знаю он в нем останавливается тобишь в этом случае застрявает... эмм.. что за парадокс?  Мда.... может быть я чегото не дочитал?
Записан

Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  

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