Четверг, 26 Декабря 2024, 00:18

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема со столкновением
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
был не раз
Сейчас нет на сайте
код из степа, урок не проходил, спасибо за ссылку

Новичок
  • Страница 1 из 1
  • 1
Поиск:

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