Tjena!
Har googlat runt men hittar ingenting som passar in/verkar fungera.
Hller p med ett spel och vill byta bild mellan tv olika bilder nr min karaktr gr hger och nr han gr vnster ska den ndra tillbaka till "vnster bilden"
Har just nu en bild som r min "fasta" karaktr i spelet men vet ej om jag ska skapa en array och sedan kra igenom den vid getKeyCode lyssnare eller om jag ska gra ngon slags if sats.
Mvh!!
Game.java
Entity.java
PlayerEntity.java
Har googlat runt men hittar ingenting som passar in/verkar fungera.
Hller p med ett spel och vill byta bild mellan tv olika bilder nr min karaktr gr hger och nr han gr vnster ska den ndra tillbaka till "vnster bilden"
Har just nu en bild som r min "fasta" karaktr i spelet men vet ej om jag ska skapa en array och sedan kra igenom den vid getKeyCode lyssnare eller om jag ska gra ngon slags if sats.
Mvh!!
Game.java
Kod:
public class Game implements KeyListener { boolean gameRunning = true; int points = 0; private HashMap<String, Boolean> keyDown = new HashMap<String, Boolean>(); private Map map; private Entity player; double camX, camY; private GameScreen gameScreen = new GameScreen("Ratchet And Clank", 1024, 768, false); // OBS! Skall Vara false. // Nu kommer klassen public Game(){ map = new Map("map2.txt", 42); gameScreen.setBackground(map); gameScreen.setKeyListener(this); keyDown.put("left", false); keyDown.put("right", false); keyDown.put("up", false); keyDown.put("down", false); loadImages(); gameLoop(); } public void loadImages(){ Image img = new ImageIcon(getClass().getResource("/rsz_rsz_clank42x42right.png")).getImage(); player = new PlayerEntity(img, map, 42, 670, 100); } public void update(long delta){ // Kamera som fljer karaktren if(player.getX() > map.getTileSize()*11) { camX = player.getX(); gameScreen.cameraMoveTo(camX - map.getTileSize()*11, camY); } player.setDx(0); ; if (keyDown.get("left")) { player.setDx(-1); } if (keyDown.get("right")) { player.setDx(1); } if (keyDown.get("up") && player.getAllowedjump()) { player.jump(260.0); player.setAllowedjump(false); } player.move(delta); Point hitTile = player.hitTile(2); if(hitTile.x != -1) { points++; map.setTile(hitTile.x, hitTile.y, 0); } } public void render(){ gameScreen.render(player); } public void gameLoop(){ long last = System.nanoTime(); while(gameRunning){ long delta = (System.nanoTime() - last); last = System.nanoTime(); update(delta); render(); // Frdrjning try { Thread.sleep(4); } catch (Exception e) {}; } } /** Spelets tangentbordslyssnare */ public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { // check the keyboard and record which keys are pressed if (e.getKeyCode() == KeyEvent.VK_LEFT) { keyDown.put("left", true); } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { keyDown.put("right", true); } if (e.getKeyCode() == KeyEvent.VK_DOWN) { keyDown.put("down", true); } if (e.getKeyCode() == KeyEvent.VK_UP) { keyDown.put("up", true); } } public void keyReleased(KeyEvent e) { // check the keyboard and record which keys are released if (e.getKeyCode() == KeyEvent.VK_LEFT) { keyDown.put("left", false); } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { keyDown.put("right", false); } if (e.getKeyCode() == KeyEvent.VK_DOWN) { keyDown.put("down", false); } if (e.getKeyCode() == KeyEvent.VK_UP) { keyDown.put("up", false); } } public static void main(String[] args) { new Game(); } }
Entity.java
Kod:
/** * MINA NDRINGAR * 1) import se.egy.graphics.Drawable; * 2) public class Entity implements Drawable * 3) Bytt namn p metooden paint till draw */ public abstract class Entity implements Drawable{ // x, y position p figuren i px protected double x, y; // Rrelseriktiningen p entiteten */ protected int dx = 0, dy = 0; // Hastigheten p spelfiguren i px/s protected int speedX; protected double speedY = 0; // Bilden som representerar figuren protected Image image; // Rutntet med spelplanen protected Map map; // Vrde i rutntet som inte spelfiguren kan g till, typ en vgg. protected int blocked = 1; // jump value protected boolean jumping = false; // falling value protected boolean falling = false; // gravity protected double gravity = 400; // maximal hastighet protected double maxDY = 0.0; protected boolean allowedjump = true; /** * Konstruktor * * @param image bilden som representerar spelfiguren * @param map rutntet med spelplanen * @param x x-position p skrmen * @param y y-position p skrmen * @param speed rrelsehastighet i px/s som figuren skall rra sig med * @param gravity graviditeten spelaren ska ha */ public Entity(Image image, Map map, double x, double y, int speed) { this.image = image; this.map = map; this.x = x; this.y = y; this.speedX = speed; this.jumping = false; } /** * Frflyttar spelfiguren beroende p frfluten tid * @param deltaTime tid som frflutit sedan frra uppdateringen i nano sekunder */ public abstract void move(long deltaTime); /** * Kontrollerar om en position p skrmen inte r blockerd * @param nx * @param ny * @return */ public boolean validLocation(double nx, double ny) { if(hitTile(nx, ny, blocked).x != -1) { return false; }else { return true; } } protected Point hitTile(double xPos, double yPos, int tileValue) { int x = -1, y = -1; if (map.getTileFromPx(xPos, yPos) == tileValue) { x = (int)xPos/map.getTileSize(); y = (int)yPos/map.getTileSize(); return new Point(x, y); } if (map.getTileFromPx(xPos + image.getWidth(null)-1, yPos) == tileValue) { x = (int)(xPos + image.getWidth(null)-1)/map.getTileSize(); y = (int)yPos/map.getTileSize(); return new Point(x, y); } if (map.getTileFromPx(xPos + image.getWidth(null)-1, yPos + image.getHeight(null)-1) == tileValue) { x = (int)(xPos + image.getWidth(null)-1)/map.getTileSize(); y = (int)(yPos + image.getHeight(null)-1)/map.getTileSize(); return new Point(x, y); } if (map.getTileFromPx(xPos, yPos + image.getHeight(null)-1) == tileValue) { x = (int)(xPos)/map.getTileSize(); y = (int)(yPos + image.getHeight(null)-1)/map.getTileSize(); return new Point(x, y); } return new Point(x, y); } /** * Kontrollerar om spelfiguren ligger p en ruta med ett visst vrde. * * @param tileValue * @return koordinaten p rutan i rutntet med skt vrde Om den inte finns returneras(-1,-1) */ public Point hitTile(int tileValue) { return hitTile(x, y, tileValue); } /** * Draw this entity to the graphics context provided. * * @param g The graphics context to which the entity should be drawn */ public void draw(Graphics2D g) { g.drawImage(image, (int)x, (int)y, null); } public void jump(double speed) { speedY = -speed; falling = true; } // Getters och Setters public int getDx() { return dx; } public void setDx(int dx) { this.dx = dx; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } // Gravity nr man hoppar public int getSpeedX() { return speedX; } public void setSpeedX(int speedX) { this.speedX = speedX; } public double getSpeedY() { return speedY; } public void setSpeedY(double ySpeed) { this.speedY = ySpeed; } public void setAllowedjump(boolean allowedjump) { this.allowedjump = allowedjump; } public boolean getAllowedjump() { return allowedjump; } }
PlayerEntity.java
Kod:
public class PlayerEntity extends Entity { public PlayerEntity(Image image, Map map, double x, double y, int speed) { super(image, map, x, y, speed); // TODO Auto-generated constructor stub } public void move(long deltaTime) { if(speedY < 800 && falling) { speedY += gravity*(deltaTime/1000000000.0); //System.out.println(speedY); } double nx = x + dx*speedX*(deltaTime/1000000000.0); double ny = y + speedY*(deltaTime/1000000000.0); if (!validLocation(nx, ny)) { Point tile = hitTile(nx, ny, 1); //Vilken ruta krockar vi med // r det y som krockar if (validLocation(nx, y)) { x = nx; // Justrerar position i y-led, i kant med blocket if(speedY >= 0) { y = tile.y*map.getTileSize() - image.getHeight(null); // NDRAT }else if(speedY < 0) { y = tile.y*map.getTileSize() + map.getTileSize(); }else System.out.println("HHHH xxxxxx"); } else if (validLocation(x, ny)) { // r det i x-led krocken sker y = ny; // Justrerar position i x-led if(dx == 1) { x = tile.x*map.getTileSize() - image.getWidth(null); // NDRAT }else if(dx == -1) { x = tile.x*map.getTileSize() + map.getTileSize(); } }else { // Fel i bde x- och y-led. Identisk kod -> skapa privata metioder System.out.println("BDA " + y); if(speedY >= 0) { y = (int)(tile.y*map.getTileSize() - image.getHeight(null)); // NDRAT }else if(speedY < 0) { y = (int)(tile.y*map.getTileSize() + map.getTileSize()); } if(dx == 1) { x = (int)(tile.x*map.getTileSize() - image.getWidth(null)); // NDRAT }else if(dx == -1) { x = (int)(tile.x*map.getTileSize() + map.getTileSize()); } System.out.println("BDA " + y); } }else { x = nx; y = ny; } // Hoppa ifall tile r tillten if(hitTile(x,y+1,1).y != -1) { allowedjump = true; falling = false; speedY = 0; }else { falling = true; } /* if(getSpeedX() < 200 && falling) { double speedY; speedY = getSpeedY() + gravity; setSpeedY(speedY); }*/ } }