2015-07-17 3 views
0

У меня есть изображения, как следующее:обнаруживая Texture Столкновение

enter image description here

Я включил черную рамку, чтобы показать ширину и высоту текстуры, но они не являются на самом деле часть моего образа.

Сейчас я использую Texture Packer для хранения текстур. В моем коде, я найти область текстуры, что я хочу, как так:

TextureRegion enemyRegion = enemyAtlas.findRegion("Enemy"); 

Использование scene2d в моем актера я следующий метод рисования:

@Override 
public void draw(Batch batch, float alpha){ 
    batch.draw(textureRegion.getTexture(),this.getX(),getY(),this.getOriginX(),this.getOriginY(),this.getWidth(), 
      this.getHeight(),this.getScaleX(), this.getScaleY(),this.getRotation(),0,0, 
      textureRegion.getRegionWidth(),textureRegion.getRegionHeight(),false,false); 
} 

Когда два из этих объектов конфликтуют , Я хочу вернуть true boolean. Поэтому я делаю свою проверку на столкновение следующим образом:

if(Intersector.overlaps(rectanlge1, rectangle2)){ 
     System.out.println("intersect!"); 
     return false; 
} 

Я создаю прямоугольники в зависимости от высоты и ширины области текстуры.

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

enter image description here

Это, очевидно, столкновение в моем коде, но я не хочу, чтобы это было так зеленые и синие области не касались друг друга вообще. Как я могу достичь этого с помощью libgdx и scene2d?

+1

Довольно, что вы должны использовать различные спрайты для зеленого и синего цвета. Я действительно не помню, как читал о настройке идеального коллаборации пикселей в LibGdx, попробуйте исследовать это. –

ответ

1

Попробуйте использовать 2 прямоугольника, чтобы более точно описать ваше изображение, а затем исправить обнаружение столкновений, чтобы использовать их.

Обнаружение столкновения может выглядеть примерно так:

if(Intersector.overlaps(rectanlge1A, rectangle2A) 
    || Intersector.overlaps(rectanlge1A, rectangle2B) 
    || Intersector.overlaps(rectanlge1B, rectangle2A) 
    || Intersector.overlaps(rectanlge1B, rectangle2B)){ 
     System.out.println("intersect!"); 
     return false; 
} 
Смежные вопросы