2020-03-20, 15:09
  #1
Medlem
Tjena! Har kollat runt på youtube och internet men får ingenting att funka eller passa :/
Vill ha en text som visar poäng uppe i vänstra hörnet och vill veta hur jag enkelt kan lägga till text på skärmen, säkert jätteenkelt men är inte så duktig på Java.. Kan pasta min kod till min GameMain fil.

Kod:
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashMap;
import javax.swing.ImageIcon;
import se.egy.graphics.GameScreen;


public class Game implements KeyListener {

	boolean gameRunning = true;
	protected int points = 0;
	
	//Skjutar kod
	int  bx, by;
	boolean readyToFire, shot = false;
	Rectangle bullet;
	
	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[] images = new Image[2];
		images[0] = new ImageIcon(getClass().getResource("/rsz_rsz_clank42x42right.png")).getImage();
		images[1] = new ImageIcon(getClass().getResource("/rsz_rsz_clank42x42.png")).getImage();		
		
		
		player = new PlayerEntity(images, map, 42, 670, 150);
	}

	public void update(long delta){
		
		
		// Kamera som följer karaktären
		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();
			// Fördröjning
			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);
		}
		if (e.getKeyCode() == KeyEvent.VK_SPACE) {
			if(bullet == null) 
				readyToFire = true; 
			if(readyToFire) {
				
			}
		}
	}

	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();
	}
}






Mvh!
__________________
Senast redigerad av Sweet1337 2020-03-20 kl. 15:17.
Citera
2020-03-22, 00:25
  #2
Medlem
Har tittat lite på koden och är inte helt på det klara med hur det fungerar eftersom jag saknar vissa klasser. Men jag gör ett försök med risken för att bli krossad av de som är bättre än mig på java och dess grafik.
Spelaren är en 'PlayerEntity' och den skickas med till metoden 'render' för att ritas ut på skärmen. Så jag antar att den implementerar interfacet 'Drawable'. Men om du tittar på metoden 'render' så ser du att den kommer i lite olika former. Du kan till exempel skicka in en 'collection' eller array med flera objekt som implementerar 'Drawable' och som du vill ha utritade. Vad du skulle kunna göra om jag inte är helt fel ut är att du skapar ett objekt typ 'Score' som implementerar 'Drawable' och skickar in både spelaren och poängen i en 'collection' eller array till metoden 'render'.
Och att skapa en klass 'Score' som implementerar 'Drawable' är ju ganska enkelt. Det enda som behöver finnas i den är i princip poängen samt x- och y-koordinaterna där poängen ska ritas ut.
Och sedan för att implementera 'Drawable' så behöver du overrida metoden 'draw'. Och i den metoden så bör du kunna använda metoden 'drawString' för att skriva ut poängen.
Så i princip:
Kod:
public class Score implements Drawable {
        // Variabler och metoder för x, y och score
        // obs! score ska omvandlas till en String

        @Override public void draw(Graphics2D g) {
                g.drawString(scoreStr, x, y);
        }
}
Citera
2020-04-15, 17:07
  #3
Medlem
Citat:
Ursprungligen postat av DieTrolle
Har tittat lite på koden och är inte helt på det klara med hur det fungerar eftersom jag saknar vissa klasser. Men jag gör ett försök med risken för att bli krossad av de som är bättre än mig på java och dess grafik.
Spelaren är en 'PlayerEntity' och den skickas med till metoden 'render' för att ritas ut på skärmen. Så jag antar att den implementerar interfacet 'Drawable'. Men om du tittar på metoden 'render' så ser du att den kommer i lite olika former. Du kan till exempel skicka in en 'collection' eller array med flera objekt som implementerar 'Drawable' och som du vill ha utritade. Vad du skulle kunna göra om jag inte är helt fel ut är att du skapar ett objekt typ 'Score' som implementerar 'Drawable' och skickar in både spelaren och poängen i en 'collection' eller array till metoden 'render'.
Och att skapa en klass 'Score' som implementerar 'Drawable' är ju ganska enkelt. Det enda som behöver finnas i den är i princip poängen samt x- och y-koordinaterna där poängen ska ritas ut.
Och sedan för att implementera 'Drawable' så behöver du overrida metoden 'draw'. Och i den metoden så bör du kunna använda metoden 'drawString' för att skriva ut poängen.
Så i princip:
Kod:
public class Score implements Drawable {
        // Variabler och metoder för x, y och score
        // obs! score ska omvandlas till en String

        @Override public void draw(Graphics2D g) {
                g.drawString(scoreStr, x, y);
        }
}


Tack mannen!! Ska prova!
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in