Java Game - Самый простой способ рисовать здания

Я впервые занимаюсь графическим интерфейсом Java, и у меня есть несколько вопросов. Я делаю простую игру с боковой прокруткой - планирую ее конкретно. Окно будет 800х800.

По мере прокрутки игры будут рисоваться здания (каждые 40 пикселей или около того). Я думаю, что я сделаю один черный прямоугольник 900px, а затем установлю его копии на разных высотах пикселей (чтобы изменить высоту новых зданий). Тогда нижняя часть прямоугольника будет автоматически обрезана.

(1) Будет ли это работать?

В небе над крышами я собираюсь пролететь мимо целей, на которые можно нажимать и сбивать за точки. Я думал, что сделаю ImageIcon цели, а затем нарисую ее, перемещаясь по экрану. Но я думаю, что было бы трудно отследить координаты цели, а затем получить координаты щелчка мышью, а затем проверить, совпадают ли они.

(2) Есть ли простой способ узнать, поражена ли цель щелчком мыши (без большого количества координат и математики)?

Там же скейтбордист катается на крышах слева направо. Я думал, что поставлю за ним скрытый прямоугольник, а затем посмотрю, пересекается ли он с заданной прямоугольной крышей, чтобы определить, когда он приземлится. Но проблема в том, что они не будут пересекаться, пока он ВНУТРИ крыши. И я хочу, чтобы он был прямо над крышей.

Как я могу узнать, когда скейтбордист находится чуть выше крыши (без тонны координатной математики)?

1 ответ

По мере прокрутки игры будут рисоваться здания (каждые 40 пикселей или около того). Я думаю, что я сделаю один черный прямоугольник 900px, а затем установлю его копии на разных высотах пикселей (чтобы изменить высоту новых зданий). Тогда нижняя часть прямоугольника будет автоматически обрезана.

Это было бы хорошо - нижняя часть была бы обрезана.

В небе над крышами я собираюсь пролететь мимо целей, на которые можно нажимать и сбивать за точки. Я думал, что сделаю ImageIcon цели, а затем нарисую ее, перемещаясь по экрану. Но я думаю, что было бы трудно отследить координаты цели, а затем получить координаты щелчка мышью, а затем проверить, совпадают ли они.

Я не могу придумать какой-либо более простой способ сделать это. Проверка прямоугольной области на предмет попадания не слишком сложна:

if(mouseX >= targetX && mouseX < targetX+targetWidth &&
        mouseY >= targetY && mouseY < targetY+targetHeight){
    // is a hit
}

Для лучшего обнаружения столкновений у вас может быть цвет маски на целевом спрайте, который скрыт (или проверьте, равен ли альфа 0, если вы не используете маску). Если щелкнуть мышью на немаскированном пикселе в пределах области изображения цели, то у вас есть удар. Для проверки событий мыши ищите MouseListener или MouseAdapter.

Там же скейтбордист катается на крышах слева направо. Я думал, что поставлю за ним скрытый прямоугольник, а затем посмотрю, пересекается ли он с заданной прямоугольной крышей, чтобы определить, когда он приземлится. Но проблема в том, что они не будут пересекаться, пока он ВНУТРИ крыши. И я хочу, чтобы он был прямо над крышей.

Вам не нужен невидимый прямоугольник. Изображение скейтбордиста должно иметь ширину и высоту, которые вы должны иметь в наличии. Изображения рисуются слева вверху, поэтому основой вашего скейтбордиста является позиция Y, на которой он нарисован, плюс высота изображения. Вы хотите, чтобы это значение не выходило за пределы крыши.

Другие вопросы по тегам