Отговор на сблъсък на карта на плочки в java

Просто се чудех кой е най-добрият начин да отговоря на сблъсък на 2d карта на плочки в java.

Имам настройката на кода, така че когато правоъгълникът на играчите се пресича с правоъгълник с плочки, който е част от 2d масив от правоъгълници (Rectangle[][] collRects), възниква сблъсък.

Знам как да настроя това, но когато стартирам програмата и играчът се сблъска с плочка, играчът се движи по ръба на вътрешните плочки и в крайна сметка преминава през правоъгълниците на сблъсък.

Начинът, по който реагирам на сблъсъци в момента, е:

  1. Проверявам с операторите if от коя страна на плочката се е сблъскал играчът.
  2. Играчът има променлива скорост, така че зададох стойност нула на каквато и ос да се е движил играчът преди сблъсъка.

Предполагам, че това, което се опитвам да кажа, е, кой е най-добрият начин да се реагира при сблъсък?

Помощта ще бъде високо оценена, благодаря.


person kocon12    schedule 22.12.2011    source източник
comment
моля, дайте повече подробности за начина, по който се движат вашите спрайтове: движат ли се свободно в картата? движат ли се подравнени към някаква мрежа (като Pacman)? колко спрайта може да имате, евентуално да се сблъскат едновременно? 10? 1000?   -  person Gabriel Belingueres    schedule 23.12.2011
comment
Играчът може да се движи свободно около картата с плочки.   -  person kocon12    schedule 23.12.2011


Отговори (1)


Ако разбирам правилно, изглежда, че се интересувате от откриване на сблъсъци между играча (спрайт) и плочките (вместо други свободно движещи се спрайтове).

За това трябва да е достатъчна някаква проста модулна аритметика, за да открие (от горните леви (x,y) координати на играча) коя плочка се сблъсква в картата.

Ако приемем, че картата е съставена от матрица от плочки от NxM, номерирани от 0...N-1 хоризонтално и 0..M-1 вертикално, и размерът на плочката е 32x32 пиксела, тогава координатата на сблъскваща се плочка (i,j) е:

i = под (player.x / 32);

j = етаж (player.y / 32);

person Gabriel Belingueres    schedule 24.12.2011