2015-12-15 1 views
0

Я только начал писать игру змей в java. (См. Это, если вы не знаете, что это такое: http://codeincomplete.com/projects/snakes/ или http://elgoog.im/snake/). Итак, когда змея ест объект, его хвост растет. Чтобы физика поворота игры работала правильно, каждый сегмент хвоста должен иметь свой собственный java.awt.Rectangle hitbox. Мой вопрос в том, как я могу связать эти hitboxes/сегменты его хвоста, чтобы они всегда оставались вместе, но являются отдельными компонентами на моем JPanel. В противном случае, если есть лучший способ сделать это, дайте мне знать. Благодарю.Java-Как связать прямоугольники AWT?

+0

Возможно, у вас есть класс «FruitManager», у которого есть массив/ArrayList из фруктов, а также элементы управления, когда пломбы занавеса размещены и видны. –

+0

@WyattLowery хорошо спасибо, но это не проблема, мне нужен способ связать сегменты хвоста змеи. –

+0

Убедитесь, что их края всегда выровнены, например, всегда рисуя их на фиксированной сетке. Я бы рекомендовал реализовать собственный метод рисования вместо использования отдельных компонентов для каждого блока. –

ответ

4

Там должен быть объект змейки, с упорядоченным набором простой части змеи, каждая фигура, показывающая тип. Контролируйте модельный контроллер, каждая часть змеи ничего не должна знать о графике. Когда вы в сегменте, поставьте последнюю часть полудня. Итак, ваша змея будет содержать список частей, например:

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>(); 

Он просто знает, как рисовать первый и последний фрагменты несколько иначе.

+0

Что такое упорядоченные наборы? И что вы подразумеваете под «каждой фигурой, показывающей тип»? –

+0

Добавил кучу вещей, чтобы, надеюсь, сделать это проще. – PearsonArtPhoto

+0

yup thanks, имеет гораздо больше смысла!Кроме того, я думаю, это то, о чем говорил @MadProgrammer. –