Minecraft Eigene Buttons "bauen" á la MineCraft

Minecraft - Java Edition

JavaMeetsBlueJ

Bekanntes Mitglied
Ich habe Minecraft jetzt nur als Beispiel genommen. Wie kann man in Java Buttons erstellen, die in etwa so aussehen? Neulich habe ich auch ein Jump 'n run hier gesehen, wo der Autor meinte, er habe nicht einmal Swing dafür benutzt. Wie kann man so etwas realisieren?

Guß
[EDIT]Das SPiel hier heißt SnailRail[/EDIT]
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Du kannst das Aussehen jedes Swing Komponents beliebig ändern, wenn du willst und dich damit auskennst. Das Aussehen der Komponenten hängt dabei nur von der UI ab, die die Komponente benutzt. Möchtest du deinene eigenen Look, hast du verschiedene Möglichkeiten:
 
Zuletzt bearbeitet:

JavaMeetsBlueJ

Bekanntes Mitglied
Danke für die Antwort;) Das "Auskennen" muss noch werden ;). Wie finde ich heraus was normal in der paintComponent-Methode steht? In die Java-Ordner gucken?

Gruß
 

BRoll

Bekanntes Mitglied
Ich kann dir sagen wie ICH es bei Snail Rail gemacht habe.
Natürlich werden jetzt viele sagen es ist umständlich, aber
dafür sind die Möglichkeiten unbegrenzt dafür.
Einfach Bild als Buttongrafik und Mausposition und Druck einlesen
zum Abfragen.

Kurz und knapp sieht mein eigenes GUIField so aus:

Java:
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;

public class GUIField {
	
	public GUIField()
	{
		
	}
	
             /*
            *  s=Buttontext     x/y= Position   w/h=Breite/Höhe  allowed=Button drückbar
           * Rückgabewert ist true wenn Button ausgewählt ist
            */
	public boolean paintButton(Graphics g,String s,int x, int y, int w, int h,boolean allowed)
	{
		boolean b=false;
		int mx=Mouse.getMouseX();
		int my=Mouse.getMouseY();
		if(allowed)
		{
		if(mx>x&&mx<x+w&&my>y&&my<y+h)
		{
                                      //Buttongrafik: Ausgewählt
			g.drawImage(Main.smallbutton[1],x,y,w,h,null); 
			g.setColor(new Color(255,255,255));
		   b=true;
		}
		else
		{
                                      //Buttongrafik: Normal
			g.drawImage(Main.smallbutton[0],x,y,w,h,null);//		
			g.setColor(new Color(0,0,0));
		}
		}
		else
		{
                                      //Buttongrafik: Nicht drückbar = gesperrt
			g.drawImage(Main.smallbutton[2],x,y,w,h,null);
			g.setColor(new Color(100,0,0));
		}
		g.setFont(f);
		FontMetrics met=g.getFontMetrics(f);
		int length=met.stringWidth(s);
		g.drawString(s,x+w/2-length/2,y+25);
		return b;
	}	
}

Mouse ist einfach eine Klasse die die aktuellen Mouseposition zur verfügung stellt.
Also kann man einen Button einfach so zeichnen:

Java:
GUIField meingui=new GUIField();

if(meingui.paintButton(g,"Spiel starten!",100,100,200,40,true))
{
//Hier nur noch abfragen ob die Maustaste gedrückt wurde
//kann man aber auch direkt in der Methode mit einbauen 
}


Gruß BRoll
 
Zuletzt bearbeitet:
J

JavaMeetsBlueJ1

Gast
Sieht interessant aus;) Wird einfach nur kontrolliert, ob sich die Maus im Bereich des Buttons befindet und falls ja wird neu gezeichnet?

Dann noch ne kleine Frage: kann ein Graphics-Objekt jegliche Art von gemalten Dingen aufnehmen? Ich weiß nämlich noch nicht so ganz wie ich mir das vorstellen soll.

Danke;)
 
J

JavaMeetsBlueJ1

Gast
Wie machst du das dann eigentlich mit den Action-Listenern? Letztendlich hat man ja nur ein bild. Gruß
 

BRoll

Bekanntes Mitglied
Das wesentliche passiert hier:

Java:
 if(mx>x&&mx<x+w&&my>y&&my<y+h)
    {
//maus befindet sich im button feld
}

ActionListener benutze ich da nicht, nur bei der Mouse dann MouseListener und
MouseMotionListener. Vielleicht hilft es dir die Mouse Klasse zu sehen:

(Und für die Buttons gehts mit jedem Bild, wird automatisch von der Größe her angepasst)

Java:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;


public class Mouse implements MouseListener,MouseMotionListener{
   
	private static int x,y;
	private static boolean klick=false,klick2=false;
	private static double xf,yf;
	
	public Mouse(double fx, double fy)
	{
		xf=fx;
		yf=fy;
                    //Die double fx und yf sind nur notwendig wenn das Spiel von der Auflösung  her  angepasst umberechnet werden soll. Ansonsten einfach  1,1 einsetzen für die parameter
                    
	}
	
	public static boolean isMousePressed()
	{
		boolean b=klick;
		klick=false;
		return b;
	}
	
	public static boolean isMousePressedRight()
	{
		boolean b=klick2;
		klick2=false;
		return b;
	}
	
	public static int getMouseX()
	{
		return (int)(x/xf);
	}
	
	public static int getMouseY()
	{
		return (int)(y/yf);
	}
	
	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	
	public void mouseReleased(MouseEvent e) {

		if(e.getButton()==1)
		{
		klick=true;
		}
		if(e.getButton()==3)
		{
		klick2=true;
		}
	}

	
	public void mouseDragged(MouseEvent e) {
		x=e.getX();
		y=e.getY();
	}

	
	public void mouseMoved(MouseEvent e) {
		x=e.getX();
		y=e.getY();
		klick=false;
		klick2=false;
	}

	
}

Jo das war so das eigentliche


mfg BRoll
 
J

JavaMeetsBlueJ1

Gast
Ist echt super nett von dir, dass du einfach den Code hier postest. Genau so etwas hab ich gesucht;) Danke
 

RegenSonne

Aktives Mitglied
Mach einfach ne Klasse namens burtons, mach n Konstruktor mit allem was ein btn so hat, mach ne Render Methode wo das reinkommt und dann brauchst noch ActionListener und die mouseevents. Fertig (y)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Eigene Minecraft Enchantements Spiele- und Multimedia-Programmierung 1
C Eine eigene 3d Engine : Shader - aber wie ? Spiele- und Multimedia-Programmierung 2
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
N Eigene Java 3D Engine erstellen. Spiele- und Multimedia-Programmierung 11
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
D JOGL2 eigene mipmaps laden Spiele- und Multimedia-Programmierung 13
Steev Eigene Repaint-Logik Spiele- und Multimedia-Programmierung 17
P eigene Konsole Spiele- und Multimedia-Programmierung 6
M Eigene Strings zeichnen Spiele- und Multimedia-Programmierung 4
N RotationInterpolator um die eigene X-Achse Spiele- und Multimedia-Programmierung 2
M um eigene Achse drehen Spiele- und Multimedia-Programmierung 3
R Eigene geometrische Formen Spiele- und Multimedia-Programmierung 2
J Java Buttons Spiele- und Multimedia-Programmierung 6
E Buttons neu zeichnen im GridLayout Spiele- und Multimedia-Programmierung 2
S KeyEvent funktioniert nicht, wenn Buttons dem Frame hinzugefügt werden Spiele- und Multimedia-Programmierung 7
T Buttons in Class Spiele- und Multimedia-Programmierung 12
H Memory-Spiel mit Buttons Spiele- und Multimedia-Programmierung 2
B Pokerspiel: Problem mit Grafiken und Buttons Spiele- und Multimedia-Programmierung 3
B Ein Array für Buttons Spiele- und Multimedia-Programmierung 8
H Teile des Grafikbereichs auf Buttons, Menuleiste usw Spiele- und Multimedia-Programmierung 2
F MindMap bauen? Spiele- und Multimedia-Programmierung 2
T Typische Strategiespielgebäude bauen Spiele- und Multimedia-Programmierung 10

Ähnliche Java Themen

Neue Themen


Oben