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, на которой он нарисован, плюс высота изображения. Вы хотите, чтобы это значение не выходило за пределы крыши.