Я пытаюсь использовать метод перекрытий, чтобы определить, сталкиваются ли два спрайта, но по какой-то причине он просто не работает. Он всегда возвращает false, даже когда я отчетливо вижу, как спрайты сталкиваются друг с другом.Метод перекрытия прямоугольника libgdx
Самое смешное, что это не первый случай, когда это случается со мной. Я не знаю, почему метод перекрытий не работает.
Вот мой класс Hero, у которого есть метод под названием isCollided.
package world_objects;
import helpers.Values;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Rectangle;
/* Created by David Lasry : 10/25/14 */
public class Hero{
public enum HeroState {
Walking_Forward,
Walking_Left,
Walking_Right,
Dead
}
public HeroState state;
private Rectangle body;
private float x,y;
public Hero() {
x = Values.SCREEN_WIDTH/5;
y = Values.SCREEN_HEIGHT/5;
body = new Rectangle(x, y, Values.Hero_Width, Values.Hero_Height);
state = HeroState.Walking_Forward;
}
public Rectangle getBody() {
return body;
}
public boolean isCollided(Rectangle rect) {
Gdx.app.log("Collision Detected", ""+body.overlaps(rect));
return rect.overlaps(body);
}
public HeroState getState() {
return state;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public void setX(float x) {
this.x = x;
}
public void setY(float y) {
this.y = y;
}
}
Как вы можете видеть, я попытался отладить его, выяснив, что такое возвращаемое значение. Каждый раз это ложь, даже когда это должно быть правдой.
Что я могу сделать? Есть ли альтернативный метод, который я могу использовать?
Edit: После отладки немного и пытается выяснить значения двух объектов (Hero, Object) в режиме реального времени, я придумал этот снимок экрана: http://i.gyazo.com/852fea520b060870a4cb5731c21fa833.png. Значение двух объектов в этом же положении находится (X/Y находится в нижнем левом углу):
**Hero X/Y: 64.5,283.40985**
**Hero WIDTH/HEIGHT: 25,50**
**Square X/Y: 76.25,0.0**
**Square WIDTH/HEIGHT: 47.5,309.13348**
Как вы можете видеть, значение совершенно нормальны. Я не понимаю, где проблема.
Вы должны использовать отладчик. Поместите там точку останова и проверьте значения для обоих прямоугольников, когда они должны перекрываться. Метод работает. – Barodapride
@David Lasry смотрите это, например, http://stackoverflow.com/questions/26332199/libgdx-animation-inside-of-a-rectangle-collison-detection-rectangles/26356382#26356382 –
Я просто посмотрел на координаты прямоугольников и они в порядке! Значения верны, но все равно это не сработает ... –