2013-06-14 6 views
0

Итак, у меня есть ArrayList, который содержит все плитки, которые нужно рисовать на экране, и у меня есть плеер, который перемещается с помощью клавиш со стрелками, но я не уверен, как я мог бы реализовать столкновение с этим, было бы эффективно проверить, заполнена ли текущая плитка, и если так прекратится, Это мой первый раз, когда вы создаете игру с нуля, поэтому любая помощь очень ценится!Самый простой способ сделать столкновение LWJGL JAVA

EDIT: Плитки - это 32x32 изображения, которые хранятся в ArrayList в основном, если вы, ребята, можете мне помочь при столкновении по оси Y, я должен быть в порядке с остальными. Класс плитки содержит x, y и тип плитки

EDIT2: Я еще ничего не пытался, я не знаю, с чего начать, но в основном мне нужен какой-то столкновение на плитке, например, пока игрок движется, если сталкиваются на плитке что-то делать, но я не знаю, как проверить, если я столкнулся или не

+0

Можете ли вы подробно остановиться на этом вопросе? Что удерживает ArrayList на панели? Что такое плитка? Не могли бы вы добавить код в свою проблему? – tmaxxcar

+1

Привет, добро пожаловать в StackOverflow. Что вы пробовали, и что пошло не так? – CPerkins

+0

вы хотите узнать, сталкивается ли игрок (в местоположении x, y) в плитку (размером 32 * 32). Первое, что вам нужно знать, - это место расположения плитки, которое представлено X и Y в вашем классе плитки. Затем вы можете добавить 32 к значениям X и Y, чтобы получить нижний правый угол вашего изображения. – tmaxxcar

ответ

1

Ниже у меня есть пример мячиком, который испытает на конце JPanel, и сделать что-то

//x = X-Axis Location //This tests for a collision of the JPanel on the left side or the right side 
public boolean isLeavingSideToSide(JPanel jp) 
{ 
    if(x <=0 || x+ width >= jp.getWidth()) 
    { 
     BounceEvent be = new BounceEvent(this); 
     notifyListeners(be);    
     return true; 
    } 
    else 
     return false; 
} 

BounceEvent создан, чтобы разрешить notifyListener, который вызывает метод отскока.

public void notifyListeners(BounceEvent be) 
{ 
    for(BounceListener bl : listeners) 
    { 
     bl.bounced(be); 
    } 
} 

Мой Возвращенные метод изменяет цвет шара (Есть ли какие-то действия)

public void bounced(BounceEvent be) { 
    Ball b = be.getBall(); 
    Color c = b.getColor(); 
    int x = 256; 
    int newColor1 = (int) (Math.random() * x); 
    int newColor2 = (int) (Math.random() * x); 
    int newColor3 = (int) (Math.random() * x); 
    b.setColor(new Color(newColor1,newColor2,newColor3)); 
} 

Надеюсь, это поможет вам начать работу.

+0

Спасибо, но это помогает мне в тестировании, если игрок покинул экран:/Я хочу проверить, не столкнулся ли игрок с плиткой – user2487095

+1

Это дает вам возможность начать тестирование, если вы можете реализовать это для своего экран, тогда вы должны понимать, как работают конфликты, и оттуда вы сможете задать более конкретный вопрос. Помните, чем более общий ваш вопрос, тем менее вероятно, что люди попытаются помочь. – tmaxxcar

1

Обнаружение столкновений не имеет значения для новичков и не может быть полностью объяснено в столбце Stackoverflow; если вы все еще боретесь с массивами, попробуйте сделать простые игры, где обнаружение столкновения определяется путем вычисления расстояния между объектами, такими как кругов.

Есть много способов справиться с обнаружением столкновений, но вы должны быть более конкретными:
каких плиток на основе игры вы планируете развивать?

Я настоятельно рекомендую вам прочитать this article от Katy Coe, в котором приводится краткое изложение нескольких реализаций. Следующие способы объясняются в вышеупомянутом блоге.

Простейший и наиболее интуитивно понятный метод: Pixel Color Approach, где игроки могут перемещаться по плиткам с определенным значением цвета, но его можно использовать только с ограниченной цветовой палитрой. Маска Подход по существу такой же, как и PCA, но он скрывает черно-белые слои за пользовательской графикой; последний является дорогостоящим и не рекомендуется в целом.

Основанный на сетке подход - это, вероятно, то, что вы ищете. Каждый элемент карты соответствует черепице сетки (описываемой 2D-массивом). Игрок движется в дискретном пространстве, хотя анимация может подделывать движения жидкости.

Метод пиксельной плитки описывает столкновения с помощью круговых символов с n контрольными точками; этот подход позволяет разработчику использовать неквадратные символы в черепичном мире. Метод Bounding Box - это более простая реализация PTM, где игрок обернут в прямоугольник.Программа проверяет, пересекается ли любой из четырех углов прямоугольника с любой стеной.

Discrete Collision Detection или его улучшенная версия, Спекулятивные Контакты, используются в более сложных играх, и вы, конечно, не нужны те, в настоящее время.

Не пытайтесь изучить все сразу, начните с простейшей реализации, вы можете думать о. В противном случае вы скоро разочаруетесь и не оцените про/минусы каждой техники.

Я недавно нашел this great tutorial о играх на основе плитки с Macromedia Flash, но вы можете легко применить эти методы, используя свой язык по выбору. ПРОЧИТАЙТЕ ЭТО! Если вы хотите найти альтернативу статьям Кэти, Rodrigo Monteiro comes in help.

Смежные вопросы