Столкновения
|
|
minecrafter2 | Дата: Четверг, 01 Января 2015, 20:49 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Код if(p.player().intersects(w.wall_1())){ if(p.y < 64 ){ p.y -= 1; } if(p.y > 64 ){ p.y += 1; } if(p.x < 64 ){ p.x -= 1; } if(p.x > 64 ){ p.x += 1; } } Можно ли подругому сделать остановку персонажа,а то таким способом очень неудобно и появляется множество багов! Тоесть мне надо как-то надо заменить вот эту часть: Код if(p.y < 64 ){ p.y -= 1; } if(p.y > 64 ){ p.y += 1; } if(p.x < 64 ){ p.x -= 1; } if(p.x > 64 ){ p.x += 1; }
Майнкрафт - лучшая игра в мире
|
|
| |
daun | Дата: Четверг, 01 Января 2015, 21:05 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| И как, с такими условиями приблизиться к 64?
|
|
| |
minecrafter2 | Дата: Четверг, 01 Января 2015, 21:18 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Так там стена.Нам не надо туда приближаться.
Майнкрафт - лучшая игра в мире
|
|
| |
daun | Дата: Четверг, 01 Января 2015, 21:27 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Понял, нужно отталкивание. Встань на середину комнаты, представь координатную сетку, и попробуй сам же выполнить свои же команды. Твой комп наверное тебя ненавидит.)
|
|
| |
minecrafter2 | Дата: Четверг, 01 Января 2015, 21:32 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Ну попробовал... Иии...?Так как релиазовать отталкивание другим способом?
Майнкрафт - лучшая игра в мире
|
|
| |
daun | Дата: Четверг, 01 Января 2015, 21:44 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| if(p.x > 70 ){p.y -= 1;} if(p.x < 60 ){p.y += 1;} if(p.y > 70 ){p.y -= 1;} if(p.y < 60 ){p.y += 1;}
|
|
| |
minecrafter2 | Дата: Четверг, 01 Января 2015, 21:50 | Сообщение # 7 |
участник
Сейчас нет на сайте
| Так это по сути тоже самое!А мне надо ДРУГИМ способом.
Майнкрафт - лучшая игра в мире
|
|
| |
daun | Дата: Четверг, 01 Января 2015, 22:08 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Понял, не хочется каждую стенку ручками прописывать, тогда способы зависят от выбранной структуры по которой строится игра или чо там.
|
|
| |
FadeBaker | Дата: Пятница, 02 Января 2015, 01:34 | Сообщение # 9 |
JavaSE Game Developer
Сейчас нет на сайте
| Ну смотри. Есть, допустим, стена, вписанная в прямоугольник, имеющий, как ты, наверное, знаешь, четыре стороны, каждая из которых имеет свои координаты в пространстве. Для того, чтобы проверить пересечение с этим прямоугольником, нужно, понятное дело, представить и твой объект в виде такого же прямоугольника. Чтобы тебе было более понятно, покажу на примере: Код public boolean intersects(Rectangle r1, Rectangle r2) { return r1.x + r1.w > r2.x && r1.y + r1.h > r2.y && r1.x < r2.x + r2.w && r1.y < r2.y + r2.h; } Здесь происходит банальная проверка на вхождение одного прямоугольника в другой. Ниже пример кода, запрещающего игроку двигаться сквозь препятствия: Код public void tick() { //метод обновления логики игрока float xa = 0; //переменные, определяющие смещение игрока float ya = 0; float spd = 2f; if (Key.down(Keys.W)) ya -= spd; if (Key.down(Keys.S)) ya += spd; if (Key.down(Keys.A)) xa -= spd; if (Key.down(Keys.D)) xa += spd; Rectange r = new Rectangle(x + xa, y + ya, w, h); //w и h - размер объекта игрока boolean stopped = false; //игрок пока может двигаться for (Wall wall : walls) { //walls - список стен if (r.intersects(wall.getBounds())) stopped = true; //getBounds() должен возвращать прямоугольник, в который вписана стена //проверяем на пересечение с каждой из стен, если пересечение было, то запрещаем движение if (stopped) break; //и прекращаем проверку } if (!stopped) { //если можно двигаться - двигаемся x += xa; y += ya; } }
Как-то так.
Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
|
|
| |
minecrafter2 | Дата: Пятница, 02 Января 2015, 14:56 | Сообщение # 10 |
участник
Сейчас нет на сайте
| FadeBaker, Спасибо,помог.
Майнкрафт - лучшая игра в мире
|
|
| |