added collision
This commit is contained in:
54
src/de/miaurizius/jgame2d/core/CollisionHandler.java
Normal file
54
src/de/miaurizius/jgame2d/core/CollisionHandler.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package de.miaurizius.jgame2d.core;
|
||||
|
||||
import de.miaurizius.jgame2d.entity.Entity;
|
||||
|
||||
public class CollisionHandler {
|
||||
|
||||
GamePanel panel;
|
||||
|
||||
public CollisionHandler(GamePanel panel) {
|
||||
this.panel = panel;
|
||||
}
|
||||
|
||||
public void checkTile(Entity entity) {
|
||||
int entityLeftWorldX = entity.worldX + entity.solidArea.x;
|
||||
int entityRightWorldX = entity.worldX + entity.solidArea.x + entity.solidArea.width;
|
||||
int entityTopWorldY = entity.worldY + entity.solidArea.y;
|
||||
int entityBottomWorldY = entity.worldY + entity.solidArea.y + entity.solidArea.height;
|
||||
|
||||
int entityLeftCol = entityLeftWorldX/panel.tileSize;
|
||||
int entityRightCol = entityRightWorldX/panel.tileSize;
|
||||
int entityTopRow = entityTopWorldY/panel.tileSize;
|
||||
int entityBottomRow = entityBottomWorldY/panel.tileSize;
|
||||
|
||||
int tileNum1, tileNum2;
|
||||
|
||||
switch(entity.direction) {
|
||||
case UP:
|
||||
entityTopRow = (entityTopWorldY - entity.speed)/panel.tileSize;
|
||||
tileNum1 = panel.tileM.mapTileNum[entityLeftCol][entityTopRow];
|
||||
tileNum2 = panel.tileM.mapTileNum[entityRightCol][entityTopRow];
|
||||
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
|
||||
break;
|
||||
case DOWN:
|
||||
entityBottomRow = (entityBottomWorldY + entity.speed)/panel.tileSize;
|
||||
tileNum1 = panel.tileM.mapTileNum[entityLeftCol][entityBottomRow];
|
||||
tileNum2 = panel.tileM.mapTileNum[entityRightCol][entityBottomRow];
|
||||
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
|
||||
break;
|
||||
case LEFT:
|
||||
entityLeftCol = (entityLeftWorldX - entity.speed)/panel.tileSize;
|
||||
tileNum1 = panel.tileM.mapTileNum[entityLeftCol][entityTopRow];
|
||||
tileNum2 = panel.tileM.mapTileNum[entityLeftCol][entityBottomRow];
|
||||
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
|
||||
break;
|
||||
case RIGHT:
|
||||
entityRightCol = (entityRightWorldX + entity.speed)/panel.tileSize;
|
||||
tileNum1 = panel.tileM.mapTileNum[entityRightCol][entityTopRow];
|
||||
tileNum2 = panel.tileM.mapTileNum[entityRightCol][entityBottomRow];
|
||||
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -31,6 +31,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
TileManager tileM = new TileManager(this);
|
||||
KeyHandler keyH = new KeyHandler();
|
||||
Thread gameThread;
|
||||
public CollisionHandler collisionH = new CollisionHandler(this);
|
||||
public Player player = new Player(this, keyH);
|
||||
|
||||
public GamePanel() {
|
||||
@@ -48,7 +49,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
double drawInterval = 1000000000 / FPS;
|
||||
double drawInterval = (double) 1000000000 / FPS;
|
||||
double delta = 0;
|
||||
double lastTime = System.nanoTime();
|
||||
long currentTime;
|
||||
@@ -58,7 +59,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
while(gameThread != null) {
|
||||
currentTime = System.nanoTime();
|
||||
delta += (currentTime - lastTime) / drawInterval;
|
||||
timer += currentTime - lastTime;
|
||||
timer += (long) (currentTime - lastTime);
|
||||
lastTime = currentTime;
|
||||
|
||||
if(delta >= 1) {
|
||||
@@ -68,7 +69,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
drawCount++;
|
||||
}
|
||||
if(timer >= 1000000000) {
|
||||
System.out.println("FPS: " + drawCount);
|
||||
//System.out.println("FPS: " + drawCount);
|
||||
drawCount = 0;
|
||||
timer = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user