2013-06-24 4 views
0

У меня есть игра в ракетную посадку, где игрок является ракетой, и вы должны безопасно приземлиться на нужной скорости на посадочной площадке. Это было взято с www.gametutorial.netJava 2D Game - проверка того, касается ли игрок другого спрайта

Его фактически в образовательных целях, и я недавно добавил в игру еще один метеор. Когда игрок попадает в метеор (касается), игра заканчивается.

if(...) { 
    playerRocket.crashed = true; 
} 

Моя проблема есть мне нужно заменить «...» с реальным условием, что „ли ракета врезалась в метеор?“

Plus следующие переменные (координаты, высота и ширина) для использования - [Все Целые]:

X and Y coordinates: playerRocket.x, playerRocket.y, meteor.x, meteor.y 
Height and Width: playerRocket.rocketImgHeight, playerRocket.rocketImgWidth, meteor.meteorImgHeight, meteor.meteorImgWidth 
+0

вам нужно проверить на 2 точек пересечения ... Другими словами, вам нужно проверить, является ли х ракеты, у падения х metero в, у или нет – sanbhat

+0

Что вы думаете? Поделитесь с нами своими мыслями .. – Maroun

ответ

1

для обнаружения столкновений в 2D-играх, вы можете использовать прямоугольники. Я бы использовал базовый класс с именем GObject и наследовал от него все объекты в игре.

public class GObject 
{ 

    private Rectangle bounds; 

    public float x, y, hspeed, vspeed; 

    private Image image; 

    public GObject(Image img, float startx, float starty) 
    { 
     image = img; 
     x = startx; 
     y = starty; 
     hspeed = vspeed = 0; 
     bounds = new Rectangle(x, y, img.getWidth(null), img.getHeight(null)); 
    } 

    public Rectangle getBounds() 
    { 
     bounds.x = x; 
     bounds.y = y; 
     return bounds; 
    } 

} 

Там также другие методы, такие как update() и render(), но я не показывая их. Таким образом, чтобы проверить наличие столкновений между двумя объектами, используйте

public boolean checkCollision(GObject obj1, GObject obj2) 
{ 
    return obj1.getBounds().intersects(obj2.getBounds()); 
} 

Также есть специальный сайт для вопросов, связанных с игрой. Перейдите к Game Development Stack Exchange

+0

Является ли использование многоразового (но неизменяемого) Rectange меры эффективности? –

+0

@RichardTingle Да, лучше использовать один объект вместо создания по одному для каждого фрейма. –

+0

Более эффективно, да, я не уверен, что лучше сказать. Это может привести к жутким действиям на расстоянии, если вы не будете очень осторожны. Например, если на более позднем этапе кто-то решает использовать этот Прямоугольник, чтобы обеспечить некоторые эффекты (например, взрыв), которые сохраняются в течение нескольких кадров, тогда этот взрыв может скакать, когда происходят новые столкновения. Если бы это был не прямоугольник, а нечто, что расширило Rectange, где было ясно, что это движущееся значение –

1

Вам нужно проверить, попали ли вы в объект, если координаты кликов находятся в пределах объекта Rectangle.

if(playerRocket.x + playerRocket.width >= clickX && playerRocket.x <= clickX && 
    playerRocket.y + playerRocket.height >= clickY && playerRocket.Y <= clickY) { 

    playerRocket.crashed = true; 

}