Проблема со столкновением
|
|
Neveh1995 | Дата: Пятница, 12 Февраля 2016, 19:50 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| В общем, есть код горизонтального столкновения: { while(!place_meeting(x+sign(hspeed), y, Platform)) { x += sign(hspeed); } hspeed=0 } если резко сменить клавишу движения, то горизонтальная скорость становится равной нулю. Ну это если я правильно понял, но если hspeed=0 убрать то персонаж врезается в стенку. Что посоветуете?
Поправка, ошибка состоит в том, что если отпускать кнопку влево и резко нажать вправо(и наоборот), при отпускании горизонтальная скорость становится равна нулю, как такое можно исправить?(это нужно чтобы персонаж останавливался при движении и скорость по оси х не сохранялась а по отпусканию клавиши персонаж встал на месте.)
Новичок
Сообщение отредактировал Neveh1995 - Суббота, 13 Февраля 2016, 10:56 |
|
| |
StelSMaN_82 | Дата: Пятница, 12 Февраля 2016, 21:43 | Сообщение # 2 |
Master Of Game maker
Сейчас нет на сайте
| Товарищ, за чем же так извращаться? Как на счет просто сделать трение? (friction = 0.2) А вообще хотелось бы видеть как реализовано движение. + было бы не плохо сказать, платформер у вас или же тдс.
Помог - плюс в репу!
|
|
| |
Neveh1995 | Дата: Пятница, 12 Февраля 2016, 22:06 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| У меня платформер, это единственный вариант который я нашел на просторах интернета, чтобы персонаж в вертикальной стене не застревал. Движение хорошее, одна проблема что при резкой смене клавиш персонаж встает на месте
Новичок
|
|
| |
YellowAfterlife | Дата: Пятница, 12 Февраля 2016, 22:12 | Сообщение # 4 |
Сейчас нет на сайте
| Это немного иначе делается. В событии создания делается отдельная переменная xspeed = 0. Она же изменяется при нажатии кнопок (как и hspeed). И движение в шаге делается как
Код var xsign; xsign = sign(xspeed); repeat (abs(xspeed)) { if (!place_meeting(x + xsign, y, Platform)) { x += xsign; } else { // врезались в стену xspeed = 0; break; } } Таким образом игрок не застревает в стенах, поскольку из встроенной скорости используется лишь вертикальная, а по горизонтали движение идет отдельным циклом.
|
|
| |
Neveh1995 | Дата: Суббота, 13 Февраля 2016, 10:49 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Все бы хорошо, однако это не помогло по какой то причине(
Добавлено (13 февраля 2016, 10:49) --------------------------------------------- Поправка, ошибка состоит в том, что если отпускать кнопку влево и резко нажать вправо(и наоборот), при отпускании горизонтальная скорость становится равна нулю, как такое можно исправить?(это нужно чтобы персонаж останавливался при движении и скорость по оси х не сохранялась а по отпусканию клавиши персонаж встал на месте.)
Новичок
Сообщение отредактировал Neveh1995 - Суббота, 13 Февраля 2016, 10:56 |
|
| |
OpenGOO | Дата: Суббота, 13 Февраля 2016, 12:38 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Есть же функции move_outside_solid и move_outside_all
Кстати, из какого события код вызывается и урок Creating Platform Games был пройден?
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
Neveh1995 | Дата: Суббота, 13 Февраля 2016, 14:02 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| код из степа, урок не проходил, спасибо за ссылку
Новичок
|
|
| |