Anpassungen an GameLoop und Keybindings

This commit is contained in:
andreas
2014-11-06 15:41:26 +01:00
parent 8a7db6c362
commit 880f558e52
4 changed files with 77 additions and 199 deletions
@@ -1,93 +0,0 @@
package de.heatup.testing;
import java.awt.event.KeyEvent;
import javax.swing.InputMap;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import de.heatup.cfg.Config;
import de.heatup.mapengine.MapEngine;
import de.heatup.objects.DynamicObject;
import de.heatup.objects.StaticObject;
import de.heatup.objects.logic;
import de.heatup.ui.GameInterface;
import de.heatup.ui.KeyBindings;
import de.heatup.testing.Query;
public class GameLoop {
public static void startGameLoop() {
DynamicObject dynO1 = new DynamicObject();
GameInterface.getGamePanel().add(dynO1);
DynamicObject dynO2 = new DynamicObject();
GameInterface.getGamePanel().add(dynO2);
DynamicObject dynO3 = new DynamicObject();
GameInterface.getGamePanel().add(dynO3);
DynamicObject dynO4 = new DynamicObject();
GameInterface.getGamePanel().add(dynO4);
Player player01 = new Player();
Query.setPlayer(player01);
GameInterface.getGamePanel().add(player01);
player01.setBounds(200, 200, 25, 25);
// Keybindings as object so we can load different bindings depending on number of players.
final KeyBindings kb = new KeyBindings();
kb.setKeyBindings();
GameInterface.getGamePanel().setFocusable(true);
//dynO3.setRescale(1.5,3.5);
// Config.setGamePanelWidth(900);
MapEngine me = new MapEngine(1);
for (StaticObject currentStaticObject : me.getAllMapObjects()) {
GameInterface.getGamePanel().add(currentStaticObject);
}
GameInterface.getGamePanel().setVisible(true);
//GameInterface.getGamePanel().repaint();
//GameInterface.getGamePanel().setComponentZOrder(dynO1, 1);
//GameInterface.getGamePanel().add(dynO1);
//logic.startMovement(dynO1);
//logic.startMovement(dynO2);
logic.startMovement(dynO3);
//logic.startMovement(dynO4);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
// System.out.println(kb.isDown() + " UD " + kb.isUp() + " - " + kb.isLeft() + " LR " + kb.isRight());
if ( kb.isLeft() ) {
KeyBindings.step('x',-1);
} else if ( kb.isRight()) {
KeyBindings.step('x',1);
} else if ( kb.isUp()) {
KeyBindings.step('y',-1);
} else if ( kb.isDown()){
KeyBindings.step('y',1);
} else {
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t.start();
}
}
+20 -7
View File
@@ -3,6 +3,9 @@ package de.heatup.testing;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
@@ -14,6 +17,7 @@ import de.heatup.objects.logic;
import de.heatup.ui.GameInterface; import de.heatup.ui.GameInterface;
import de.heatup.ui.KeyBindings; import de.heatup.ui.KeyBindings;
public class GameLoopD extends JFrame implements Runnable { public class GameLoopD extends JFrame implements Runnable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -28,6 +32,9 @@ public class GameLoopD extends JFrame implements Runnable {
private static JPanel gamePanel; private static JPanel gamePanel;
private static JPanel actionPanel; private static JPanel actionPanel;
public static Player player01;
public static KeyBindings kb;
DynamicObject dynO3; DynamicObject dynO3;
public static void main(String[] args) { public static void main(String[] args) {
@@ -81,17 +88,15 @@ public class GameLoopD extends JFrame implements Runnable {
DynamicObject dynO4 = new DynamicObject(); DynamicObject dynO4 = new DynamicObject();
gamePanel.add(dynO4); gamePanel.add(dynO4);
Player player01 = new Player(); player01 = new Player();
Query.setPlayer(player01); Query.setPlayer(player01);
gamePanel.add(player01); gamePanel.add(player01);
player01.setBounds(25, 25, 200, 200); player01.setBounds(25, 25, 200, 200);
// Keybindings as object so we can load different bindings depending on number of players.
// KeyBindings kb = new KeyBindings();
gamePanel.setFocusable(true); gamePanel.setFocusable(true);
// kb.setKeyBindings();
kb = new KeyBindings();
gamePanel.addKeyListener(kb);
//dynO3.setRescale(1.5,3.5); //dynO3.setRescale(1.5,3.5);
@@ -161,9 +166,8 @@ public class GameLoopD extends JFrame implements Runnable {
long timer = System.currentTimeMillis(); long timer = System.currentTimeMillis();
while (running) { while (running) {
long now = System.nanoTime(); long now = System.nanoTime();
delta += (lastTime - now) / ns; delta += (now-lastTime) / ns;
lastTime = now; lastTime = now;
if (delta >= 1) { if (delta >= 1) {
tick(); tick();
@@ -185,6 +189,15 @@ public class GameLoopD extends JFrame implements Runnable {
} }
// alles was geupdatet werden muss hier rein // alles was geupdatet werden muss hier rein
private void tick() { private void tick() {
if (kb.isRight()) {
player01.step('x', 1);
} else if (kb.isLeft()) {
player01.step('x', -1);
} else if (kb.isUp()) {
player01.step('y', -1);
} else if (kb.isDown()) {
player01.step('y', 1);
}
} }
// alles was animiert wird hier rein (paints) // alles was animiert wird hier rein (paints)
+29
View File
@@ -54,4 +54,33 @@ public class Player extends JComponent {
public void setAutoBounds(int x, int y) { public void setAutoBounds(int x, int y) {
this.setBounds(x, y, this.bf1.getWidth(), this.bf1.getHeight()); this.setBounds(x, y, this.bf1.getWidth(), this.bf1.getHeight());
} }
public void step(final char d, final int i) {
final int stepx = 25;
final int stepy = 25;
int newx = this.getX();
int newy = this.getY();
int countx = stepx;
int county = stepy;
while (true) {
if (d == 'x' && i == -1 && countx != 0) {
countx=countx-1;
newx=newx-1;
} else if ( d == 'x' && i == 1 && countx != 0 ) {
countx=countx-1;
newx=newx+1;
} else if ( d == 'y' && i == -1 && county != 0 ) {
county=county-1;
newy=newy-1;
} else if ( d == 'y' && i == 1 && county != 0 ) {
county=county-1;
newy=newy+1;
} else {
break;
}
this.setAutoBounds(newx, newy);
}
}
} }
+25 -96
View File
@@ -2,28 +2,32 @@ package de.heatup.ui;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import de.heatup.objects.ImageLoader; public class KeyBindings extends KeyAdapter {
import de.heatup.testing.Player;
import de.heatup.testing.Query;
public class KeyBindings { private boolean left=false;
private boolean right=false;
private boolean up=false;
private boolean down=false;
static boolean ignoreKeys = false; @Override public void keyReleased(KeyEvent evt) {
static int counter; int keyCode = evt.getKeyCode();
final static Object obj = new Object(); switch (keyCode) {
public static boolean left=false; case KeyEvent.VK_LEFT: left=false; break;
public static boolean right=false; case KeyEvent.VK_RIGHT: right=false; break;
public static boolean up=false; case KeyEvent.VK_UP: up=false; break;
public static boolean down=false; case KeyEvent.VK_DOWN: down=false; break;
}
}
@Override public void keyPressed(KeyEvent evt) {
int keyCode = evt.getKeyCode();
switch (keyCode) {
public boolean isDown() { case KeyEvent.VK_LEFT: left=true; break;
return down; case KeyEvent.VK_RIGHT: right=true; break;
case KeyEvent.VK_UP: up=true; break;
case KeyEvent.VK_DOWN: down=true; break;
}
} }
public boolean isLeft() { public boolean isLeft() {
@@ -38,82 +42,7 @@ public class KeyBindings {
return up; return up;
} }
public static void setKeyBindings() { public boolean isDown() {
return down;
KeyListener kl= new KeyAdapter() {
@Override public void keyPressed(KeyEvent evt) {
int keyCode = evt.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT: left=true; break;
case KeyEvent.VK_RIGHT: right=true; break;
case KeyEvent.VK_UP: up=true; break;
case KeyEvent.VK_DOWN: down=true; break;
}
}
@Override public void keyReleased(KeyEvent evt) {
int keyCode = evt.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT: left=false; break;
case KeyEvent.VK_RIGHT: right=false; break;
case KeyEvent.VK_UP: up=false; break;
case KeyEvent.VK_DOWN: down=false; break;
}
}
};
GameInterface.getGamePanel().addKeyListener(kl);
} }
}
public static void step(final char d, final int i) {
//if ( ! ignoreKeys ) {
ignoreKeys = true;
counter++;
final Player playerX = Query.getPlayer();
final int stepx = 25;
final int stepy = 25;
// Thread t = new Thread(new Runnable() {
// @Override
// public void run() {
// synchronized (obj) {
int newx = playerX.getX();
int newy = playerX.getY();
int countx = stepx;
int county = stepy;
while (true) {
if (d == 'x' && i == -1 && countx != 0) {
countx=countx-1;
newx=newx-1;
} else if ( d == 'x' && i == 1 && countx != 0 ) {
countx=countx-1;
newx=newx+1;
} else if ( d == 'y' && i == -1 && county != 0 ) {
county=county-1;
newy=newy-1;
} else if ( d == 'y' && i == 1 && county != 0 ) {
county=county-1;
newy=newy+1;
} else {
break;
}
playerX.setAutoBounds(newx, newy);
// try {
// Thread.sleep(10);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
ignoreKeys = false;
// }
// }
// });
// t.start();
//}
}
}