Mouseover Area genau wie Image

Clover

Mitglied
Hallo liebe Leute :)

Ich bin dabei ein kleines Spiel zu programmieren. Ich benutze slick2d und lwjgl.

Mein Problem:
Eine Image mit einer MouseOverArea die genauso groß ist wie das Image.

Java:
public void init(GameContainer container, StateBasedGame game)
			throws SlickException {
....
		moa = new MouseOverArea(container, newGameOn, 10, 10);
}
public void render(GameContainer container, StateBasedGame game, Graphics g)
			throws SlickException {
....
		moa.render(container, g);
	}

Bei meinem Quellcode ist "moa.isMouseOver()" true, schon bevor der Zeiger das Image überhaupt berührt hat.
Ist das überhaupt möglich beides möglichst gleich groß zu machen in Java?

lg Clover
 

Evil-Devil

Top Contributor
Dazu steht doch bestimmt was in der Slick Doku. Das letzte Mal als ich die Slick UI Demos ausprobiert hatte, reagierten die Mouse Over nur beim wirklichen Überfahren der Schaltfläche. Vielleicht ist deine Schaltfläche größer definiert als dein Bild groß ist.
 

Clover

Mitglied
Nein, die MouseOverArea ist von x-width und y-width genauso groß wie mein Image. Aber eben
ein Rechteck.

Hab jetzt mehrere (umständliche) Lösungsansätze:
1. Ich erstelle die MOA mit einem Polygon-Shape. Dann brauch ich aber viele Punkte um eine
gescheite Area zu bekommen.

2. Ich lege hinter das Image mehrere Shapes mit Kreise, Dreiecken und versuche so das Image
komplett abzudecken.

3. Lege über den kompletten Screen ein Raster mit kleinen MOA und muss dann Grenzen für mein
Image definieren.

Aber alles nicht so schön :(
 

irgendjemand

Top Contributor
kenne mich mit der verwendeten engine nicht aus ... aber ist es nicht möglich der gewünschten component dierekt eine art listener zu adden ? würde zumindest das ganze vereinfachen *ob es dann allerdings bei polygon-shapes zum gewünschten ergnis führt ist fraglich ...*
 

Clover

Mitglied
Mein Image ist ein PNG-Bild und leider kein Rechteck. Würde es denn in JAVA andere Möglichkeiten
geben das Bild mit einem Listener zu kombinieren?
@irgendjemand:
Java:
MouseOverArea moa = new MouseOverArea(container, image, x, y, new ComponentListener() {
			
			@Override
			public void componentActivated(AbstractComponent source) {
				
			}
		});
aber auch das funktioniert nicht :( Und anders weiß ich nicht wie ich einem Image einen ComponentListener hinzufügen kann.
 

Marco13

Top Contributor
Meine Frage zielte darauf ab, dass das Bild IMMER (IMMER) ein Rechteck ist. Es hat vielleicht durchsichtige Bereiche (d.h. Bereiche mit Alpha-Wert 0), aber das Bild ist immer rechteckig. Du kannst dir aber von dem Image mit
Color c = image.getColor(mouseEvent.getX(), mouseEvent.getY());
int alpha = c.getAlpha();
den Alpha-Wert abholen, und dann sowas machen wie
Code:
if (alpha > 0) imageWasClicked();
else imageWasClickedButIdontCareBecauseItWasInATransparentArea();
 

Evil-Devil

Top Contributor
Naja, SLICK bietet eben "nur" GUI Komponenten die rechteckig sind an. Alles andere musst du dir selbst entwickeln.
Mit Transparenz kann SLICK umgehen. Es sollte also nicht so schwierig sein in einem neuen GUI Element auf Transparenz zu testen.
 

Clover

Mitglied
Marco13, danke! :D So wie du es gesagt hast funktioniert es wie ich möchte.

Code für Interessierte:
Java:
...
moa = new MouseOverArea(container, meinImage, 9, 202);
...
public void mouseMoved(int oldx, int oldy, int newx, int newy) {
		if (moa.isMouseOver()) {
			Color c = meinImage.getColor(newx - moa.getX(), newy - moa.getY());
			int alpha = c.getAlpha();
			if (alpha > 0 && !isNewGameOn) {
				...
			}
		}
	}
 

Ähnliche Java Themen

Neue Themen


Oben