Pause Menu im 2D Game, bitte um Rat!

oli0060

Mitglied
Hallo liebes Forum, :D

nach nun mehreren Stunden ausprobieren bin ich immer noch ratlos...

ich bin ein Java Anfänger, der sich das erste Mal über ein 2D Spiel hergemacht hat..

also meckert nicht über den Quellcode, ich weiß er könnte besser sein. :oops: :D

Ich hab ein Programm indem man eben ein Art 'Raumschiff steuert und später mal Gegner abschießen kann.. Wenn man auf esc drückt wird eine Variable auf true gesetzt und dadurch wird ein pausemenü gezeichnet. Ich wollte keinen weiteren Frame, der einfach über dem Spiel Bildschirm steht, deshalb wollte ich ein 'durchsichtiges Menu. D.h. ich hab einfach überprüft, ob der Boolean auf true ist und dann ein String array mit den Auswahlmöglichkeiten "Go on!" "options" & "quit" gezeichnet.


1. Gibt es eine andere vermutlich viel bessere Möglichkeit, als ich es hier getan habe..? In den ganzen Shootern und sowas ist es dann meistens so, dass der PauseFrame leicht transparent ist.. wie könnte ich das machen?

2. Gehen wir davon aus es gibt keine andere / bessere Möglichkeit (siehe 1.), wie kann ich es dann schaffen, dass der GameFrame, also in dem man das Raumschiff bewegt etc. nicht mehr (solange das pause Menu offen ist) nicht mehr aktuallisiert wird?

Hier der Quellcode:

MAIN
Java:
 package p_Game;

import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JFrame;


public class Main {

	public static void main(String[] args) {
		Pause pause = new Pause();
		List<Enemy> enemys = new LinkedList<Enemy>();
		List<Bullet> bullets = new LinkedList<Bullet>(); 	//Eine Liste, die speichert, wenn ein Schuss getätigt wurde.
		background bg = new background(150);				//Speed, wie schnell sich der Background bewegt
		Player p = new Player(200, 268, bullets);					//Die Halbe Höhe(300) - die Hälfte der Grafik (32px)
		Score score = new Score(enemys);
		Frame f = new Frame(p, bg, score, bullets, enemys, pause);
		enemys.add(new Enemy(300, 300));	
		enemys.add(new Enemy(400, 300));	
	
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(800, 600);
		f.setUndecorated(true);
		f.setVisible(true);
		f.setResizable(false);
		f.setLocationRelativeTo(null);
		
//		DisplayMode displayMode = new DisplayMode(800, 600, 16, 75);
//		GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
//		GraphicsDevice device = environment.getDefaultScreenDevice();
//		
//		device.setFullScreenWindow(f);
//		device.setDisplayMode(displayMode);
		
		f.makeStrat();
		
		long lastFrame = System.currentTimeMillis();
		while(true){
			if(Keyboard.isKeyDown(KeyEvent.VK_ESCAPE)){
				if(pause.getPause() == false){pause.isPause = true;}
				else pause.isPause = false;}
			long thisFrame = System.currentTimeMillis();
			float timeSinceLastFrame = ((float)(thisFrame-lastFrame))/1000f;
			lastFrame = thisFrame;
			

			bg.update(timeSinceLastFrame);
			p.update(timeSinceLastFrame);
						
			
			f.repaintScreen();
				
				for(int i = 0; i < bullets.size(); i++){
					bullets.get(i).update(timeSinceLastFrame);			
				}
				

				for(int i = 0; i < enemys.size(); i++){
					enemys.get(i).update(timeSinceLastFrame);			
				}
				
				try {
					Thread.sleep(15);
				} catch (InterruptedException e) {e.printStackTrace();}
			}
	}

	}



Frame:

Java:
package p_Game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.List;

import javax.swing.JFrame;

import p_firstLook.MenuFonts;

public class Frame extends JFrame{
	private static final long serialVersionUID = 1L;
	
//	private Screen screen;

	final Player player;
	final background bg;

	private Score score;
	private List<Bullet> bullets;
	private List<Enemy> enemys;
	private Pause pause;
	
	public static Color optionsColor;
	public static final String[] options = {"Start", "Options", "Quit"};
	public static int currentChoice = 0;
	
	BufferStrategy strat = getBufferStrategy();
	
	public Frame(Player player, background bg, Score score, List<Bullet> bullets, List<Enemy> enemys, Pause pause){
		super(p_firstLook.Frame.TITLE + " v" + p_firstLook.Frame.VERSION);
		this.player = player;
		this.bg = bg;
		this.score = score;
		addKeyListener(new Keyboard());
		this.bullets = bullets;
		this.enemys = enemys;
		this.pause = pause;
		
	}
	
	public void makeStrat(){
		createBufferStrategy(2);
		strat = getBufferStrategy();
	}
	
	public void repaintScreen(){
		Graphics g = strat.getDrawGraphics();
		draw(g);
		pause.startPauseMenu(pause.isPause, g);
		g.dispose();
		strat.show();
	}
	
	private void draw(Graphics g){
		g.drawImage(bg.getLook(), bg.getX(), 0, null);
		g.drawImage(bg.getLook(), bg.getX()+bg.getLook().getWidth(), 0, null);
		
		for(int i = 0; i< bullets.size(); i++){
			Bullet b = bullets.get(i);
		g.drawImage(Bullet.getLook(), b.getBounding().x, b.getBounding().y, null);
		}
		
		g.drawImage(player.getLook(), player.getBounding().x, player.getBounding().y, null);
		
		for(int i = 0; i < enemys.size(); i++){
			Enemy e = enemys.get(i);
		g.drawImage(e.getLook(), e.getBounding().x, e.getBounding().y, null);
		}
		
		g.setColor(Color.PINK);
		g.drawString(score.oneScoreMore(), 20, 20);
	}
		


}

PAUSE MENU:

Java:
package p_Game;

import java.awt.Color;
import java.awt.Graphics;

import p_firstLook.MenuFonts;

public class Pause {

	public boolean isPause = false;
	public static Color pausedColor;
	public static final String[] paused = {"Go On!", "Options", "Quit"};
	public static int currentChoice = 0;
	
	public Pause(){}
	
	
	public boolean getPause(){
		return isPause;
	}
	
	public void startPauseMenu(boolean isPause, Graphics g){
		if(getPause() == true){
			for(int i = 0; i < paused.length; i++){
				MenuFonts.drawString(g, pausedColor, paused[i], 150 + i * 20);
			if(i == currentChoice){pausedColor = Color.RED;}
			if(i != currentChoice){pausedColor = Color.BLACK;}
				while(getPause() == true){}
			}
		}
		
	}
	
}



Ich hoffe ich hab es einigermaßen gut erklärt und ihr könnt mir helfen
 

Ruzmanz

Top Contributor
zu 1) Ist so in Ordnung. Du kannst ein schwarzes und teil-transparentes Rechteck über den ganzen Bildschirm packen. Nach dem Rechteck zeichnest du ganz normal deine Menü.

zu 2) Etwas unschön, aber vom Prinzip:

Java:
update() {
  if(!isPause) {
     // ... Spiellogik ...
  }
}

Besser wäre es wenn du dem Spiel Zustände geben würdest isRunning, isPause, usw. und dann die Spiellogik nur bei "isRunning" ausführst. Dazu bieten sich enums an.
 

Gucky

Top Contributor
Ich verstehe nicht allzu viel von Spielen aber wäre es nicht besser, das Menü in einem separaten Thread laufen zu lassen und das Spiel so lange warten zu lassen, bis der Menüthread beendet ist? Also entweder mit join() oder wait() (ich würde join() empfehlen).
 

Ruzmanz

Top Contributor
Macht keinen Sinn. Threads sind dazu gedacht, dass Aufgaben parallel erledigt werden. Wenn jeder Thread eine Aufgabe erledigt und diese niemals Gleichzeitig laufen können bzw. auf sich warten ... dann ist das nichts anderes als eine sequenzielle Verarbeitung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Maus im Spiel-Menu oder nicht? Spiele- und Multimedia-Programmierung 5
L Spider game, Ist es verloren? Spiele- und Multimedia-Programmierung 4
J SNAKE-GAME-LOOP / (Applet zu Application) Spiele- und Multimedia-Programmierung 4
P Snake Game Verbessern Spiele- und Multimedia-Programmierung 15
E Organisation für Game Spiele- und Multimedia-Programmierung 1
G [Game-Multiplayer] Welt vom Server zum Client senden. Spiele- und Multimedia-Programmierung 0
C 3d Game Engine : PERFORMANTE Räumliche Verdeckung Spiele- und Multimedia-Programmierung 5
R Durch String Platform Game erstellen Spiele- und Multimedia-Programmierung 8
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
G Collision Detection in einem 2D Sandbox Game. Spiele- und Multimedia-Programmierung 2
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
B "Snake"-Game Logikfehler Spiele- und Multimedia-Programmierung 1
R Game Loop verhält sich eigenartig Spiele- und Multimedia-Programmierung 1
H Game Crash Spiele- und Multimedia-Programmierung 7
B Game of Life: Was mache ich falsch? Spiele- und Multimedia-Programmierung 3
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
T Moddable Game Spiele- und Multimedia-Programmierung 6
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
T Game-Rendering Spiele- und Multimedia-Programmierung 5
I 2D-Side-Scrolling-Game in Chunks splitten Spiele- und Multimedia-Programmierung 9
Z 2D Pixer art RPG Game - Alpha auf Indie DB spielbar Spiele- und Multimedia-Programmierung 0
F Game of Life Spiele- und Multimedia-Programmierung 1
S Game/Cheat Spiele- und Multimedia-Programmierung 20
wolfgang63 Mit JavaFX einfaches Game programmieren Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
K Online Game? Spiele- und Multimedia-Programmierung 1
R Game Loop scheitert.. Spiele- und Multimedia-Programmierung 2
Androbin Verschwindender Spieler in 2D-Game Spiele- und Multimedia-Programmierung 7
Sogomn Game Loop Spiele- und Multimedia-Programmierung 2
M Jump 'n' Run Game - Blöcke? Spiele- und Multimedia-Programmierung 7
J Verständnissfragen zur Game-Loop Spiele- und Multimedia-Programmierung 2
N Game GUI Programmieren Spiele- und Multimedia-Programmierung 16
Black_ixx ManaWar Action Game Spiele- und Multimedia-Programmierung 5
M Multiplayer-Game auf Website Spiele- und Multimedia-Programmierung 2
M Multiplayer Game mit Frontend auf HTML5 - ohne ständigen Client Request - Möglich?! Spiele- und Multimedia-Programmierung 12
P Mein Android Game Spiele- und Multimedia-Programmierung 3
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Kenan89 Kleines Game Spiele- und Multimedia-Programmierung 26
M Vektor Game Spiele- und Multimedia-Programmierung 13
F Bot updaten von einem Browser game Spiele- und Multimedia-Programmierung 7
Samake03 [Game]"Plumbo - Lost in Depth" Preview und Fragen Spiele- und Multimedia-Programmierung 18
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
K 3D Game wie Minecraft Spiele- und Multimedia-Programmierung 3
T Torquemada´s erstes Game (Pong) Spiele- und Multimedia-Programmierung 5
X Möglichst komplette 2D Game Engine? Spiele- und Multimedia-Programmierung 12
Kr0e Red Dwarf Game Server Spiele- und Multimedia-Programmierung 5
M Euer erstes Game Spiele- und Multimedia-Programmierung 16
M Netzwerk-Game mit UDP Spiele- und Multimedia-Programmierung 8
ruerob Eure Meinung über Applet-game Spiele- und Multimedia-Programmierung 12
J das erste Game Spiele- und Multimedia-Programmierung 2
M Einen Hobby Game - / Grafik Designer zu finden (Screenshot vom Spiel) Spiele- und Multimedia-Programmierung 7
S Game Client für kleine Competition Spiele- und Multimedia-Programmierung 3
J 2D-Game-Engine? Spiele- und Multimedia-Programmierung 2
F Game mit LWJGL/JOGL in executable JAR packen, wie? Spiele- und Multimedia-Programmierung 6
P 2D Game - Alternative zur TileMap? Spiele- und Multimedia-Programmierung 2
W Memory Game Spiele- und Multimedia-Programmierung 4
Steev EGE - Easy Game Engine Spiele- und Multimedia-Programmierung 2
Developer_X X-Shooter Game Spiele- und Multimedia-Programmierung 21
C 2D Multiplayer Game Spiele- und Multimedia-Programmierung 5
O Mein erstes Game Spiele- und Multimedia-Programmierung 10
Developer_X PingPong-the Game by Developer-X Spiele- und Multimedia-Programmierung 170
K My First Game "ORB" vielen Dank Quaxli Spiele- und Multimedia-Programmierung 23
hdi Das java-forum.org 2D-Game Projekt/Tutorial Spiele- und Multimedia-Programmierung 6
hdi Quiclix : Game download Spiele- und Multimedia-Programmierung 5
A Java 2D Game Spiele- und Multimedia-Programmierung 4
K Game-Tutorial von Quaxli Fragen Spiele- und Multimedia-Programmierung 18
G Suche passende Game api Spiele- und Multimedia-Programmierung 9
K Java Game Programming Buch Spiele- und Multimedia-Programmierung 3
C Hilfe bei einfachen Game Spiele- und Multimedia-Programmierung 15
L Kleines RTS Game -> Netzwerkproblem Spiele- und Multimedia-Programmierung 5
P Suche Leute für ein Hobby-Projekt (Browser Game) Spiele- und Multimedia-Programmierung 4
Q online game programieren Spiele- und Multimedia-Programmierung 8
G Welche Game Api Spiele- und Multimedia-Programmierung 9
S 3d applet - online game Spiele- und Multimedia-Programmierung 4
C Open-Source Game Spiele- und Multimedia-Programmierung 2
sparrow 3D-Game-Engine Spiele- und Multimedia-Programmierung 20
J Isometric Tile Game (x,y) inklusive Z cordinaten? Spiele- und Multimedia-Programmierung 2
M Java online multiplayer game Spiele- und Multimedia-Programmierung 2
J java netzwerk strategie game programmiert Spiele- und Multimedia-Programmierung 4
D Jump and Run Game -- Kollisionsabfrage Spiele- und Multimedia-Programmierung 30
B Snake-Game fürs Handy Spiele- und Multimedia-Programmierung 3
F Online Game mit Java? Spiele- und Multimedia-Programmierung 11
M Space PingPong Game --> Performance ok? Spiele- und Multimedia-Programmierung 44
R 2D Game Oberfläche. Wie am besten? Spiele- und Multimedia-Programmierung 2
H LWJGL - Lightweight Java Game Library! Ist Java3D jetzt out? Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben