Я только начал писать игру змей в java. (См. Это, если вы не знаете, что это такое: http://codeincomplete.com/projects/snakes/ или http://elgoog.im/snake/). Итак, когда змея ест объект, его хвост растет. Чтобы физика поворота игры работала правильно, каждый сегмент хвоста должен иметь свой собственный java.awt.Rectangle
hitbox. Мой вопрос в том, как я могу связать эти hitboxes/сегменты его хвоста, чтобы они всегда оставались вместе, но являются отдельными компонентами на моем JPanel
. В противном случае, если есть лучший способ сделать это, дайте мне знать. Благодарю.Java-Как связать прямоугольники AWT?
ответ
Там должен быть объект змейки, с упорядоченным набором простой части змеи, каждая фигура, показывающая тип. Контролируйте модельный контроллер, каждая часть змеи ничего не должна знать о графике. Когда вы в сегменте, поставьте последнюю часть полудня. Итак, ваша змея будет содержать список частей, например:
List<SnakePieces> mPieces
SnakePieces должен быть простым, что-то вроде этого
public class SnakePieces {
public enum Type {Head,Body,Tail};
public Type type;
}
Вы можете добавить другие функции SnakePieces по мере необходимости. Когда вы добавляете новый кусок, добавьте его в месте
mSnakePieces.add(mSnakePieces.length()-1,newSnakePiece);
Если вы можете выделить модель (движение змеи), вид (Кладет в графике для части в зависимости от типа SnakePiece), и контроллер (подает входные данные в модель). Это более продвинутый, чем требуется, но полезный. See Wikipedia on Model View Controller.
Также см. Android Snake Game, что, без сомнения, имеет некоторое сходство с вашим приложением. Android делает это через это:
/**
* mSnakeTrail: a list of Coordinates that make up the snake's body
* mAppleList: the secret location of the juicy apples the snake craves.
*/
private ArrayList<Coordinate> mSnakeTrail = new ArrayList<Coordinate>();
Он просто знает, как рисовать первый и последний фрагменты несколько иначе.
Что такое упорядоченные наборы? И что вы подразумеваете под «каждой фигурой, показывающей тип»? –
Добавил кучу вещей, чтобы, надеюсь, сделать это проще. – PearsonArtPhoto
yup thanks, имеет гораздо больше смысла!Кроме того, я думаю, это то, о чем говорил @MadProgrammer. –
Возможно, у вас есть класс «FruitManager», у которого есть массив/ArrayList из фруктов, а также элементы управления, когда пломбы занавеса размещены и видны. –
@WyattLowery хорошо спасибо, но это не проблема, мне нужен способ связать сегменты хвоста змеи. –
Убедитесь, что их края всегда выровнены, например, всегда рисуя их на фиксированной сетке. Я бы рекомендовал реализовать собственный метод рисования вместо использования отдельных компонентов для каждого блока. –