Character Bild links/rechts

Status
Nicht offen für weitere Antworten.

Bud6y

Mitglied
Hallo,

ich bin gerade dabei ein 2d Jump'n run zu programmieren... habe derzeit mit dem Gedanken gespielt ob es nicht vielleicht eine Möglichkeit gäbe das gleiche Bild das der Spieler hat wenn er nach rechts schaut dazu zu verwenden wenn er nach links schaut, demnach müsste man das Bild nur spiegeln...

würde mich freuen falls das so funktioniert und mir jemand dabei helfen könnte:)

gruß Lukas
 

Bud6y

Mitglied
danke für die schnelle Antwort..... aber des ist noch zu "hoch" für mich.... kannst mir nicht schnell ein Beispiel zeigen ;)
 

Bud6y

Mitglied
hi,

ich habe das so gemacht aber es hat sich nichts geändert ?:

if(walking_left){
AffineTransform af = new AffineTransform();
af.scale(-1,1);
g.drawImage(stance_1, x_pos_left, y_pos_up, parent);
}
 

Steev

Bekanntes Mitglied
du kannst die Sklierung schon auf das Graphis2D-Objekt setzen.

Dann wird die Bildposition allerdings mitgespiegelt, daher musst du dann eine Translation verwenden. Etwa so:


Graphics2D g2 = (Graphics2D) g;
g2.translate(100, 50);
g2.scale(-1, 1);
g2.drawImage(img, 0, 0, this);
 
Zuletzt bearbeitet:

Bud6y

Mitglied
hmm das funktioniert nicht mit g.setTransform(af)

also bei mir sieht es ungefähr so aus:
...
public void paint(Graphics g){
....
if(walking_left){
AffineTransform af = new AffineTransform();
af.scale(-1, 1);
af.setTransform(af);
g.drawImage(stance_1, x_pos_left, y_pos_up, parent);
}
...
}
 

Geeeee

Bekanntes Mitglied
Achso...nein.
Ich dachte es wäre dein Graphics2D Object.
also folgendermaßen dann:

public void paint(Graphics g){
Graphics2D playerGraphic = (Graphics2D) g;
if(walking_left){
AffineTransform af = new AffineTransform();
af.scale(-1, 1);
playerGraphic.setTransform(af);
playerGraphic.drawImage(stance_1, x_pos_left, y_pos_up, parent);
}
...
}

du hattest oben auch noch af.setTransform(af) geschrieben, DAS würde auf keinen Fall was bringen :D
 

Bud6y

Mitglied
jetzt verschwindet mein Character wenn ich ihn nach links bewege :D, und kommt auch nicht wieder wenn ich in die andere Richtung gehe...

hab das genauso gemacht, wie du es vorgeschlagen hattest.....
 

Geeeee

Bekanntes Mitglied
was passiert denn, wenn du ohne AF das machst? Also direkt das Graphics2D objekt, wie steev es geschrieben hat.
 

Steev

Bekanntes Mitglied
Das kommt daher, weil du meinen Code nicht eins zu eins umgesetzt hast.

Du brauchst eine Translation um die Koordinaten des Spielers, da dein Spieler sonst verschwindet.
Werf dein AffineTransformation-Objekt raus, da du es sowieso nicht benötist und mach mal genau das was ich weiter oben geschrieben habe.

Das mit dem verschwinden ist doch logisch, oder?

Du hast eine Position (100, 25) die du um (-1, 1) skalierst, also (100, 25) * (-1, 1).
Der neue Ort des Objektes ist damit an der Stelle (-100, 25)



public void paint(Graphics g){
Graphics2D playerGraphic = (Graphics2D) g;
if(walking_left){
playerGraphic.translate(x_pos_left, y_pos_up);
playerGraphic.scale(-1, 1);
playerGraphic.drawImage(stance_1, 0, 0, parent);
}
...
}
 
Zuletzt bearbeitet:

Bud6y

Mitglied
hmm so wie ich das versteh bring ich das bild auf ne andere Stelle richtig???, hab das noch nicht ganz verstanden....

ich will des Bild sozusagen "spiegeln", was bringt mir dann die veränderung der Koordinaten?....
 

Steev

Bekanntes Mitglied
Du spiegelst nicht nur das Bild, sondern das gesamte Koordinatensystem. Daher musst du die Koordinaten verändern, damit das Bild an derselben Stelle ist wie vorher auch. Hier ein Beispiel:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;


public class Test extends JFrame implements Runnable
{
public static void main(String[] args)
{
new Test();
}

public Test()
{
super("Test");
setBounds(100, 100, 400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
new Thread(this).start();
}

static BufferedImage img = new BufferedImage(25, 25, BufferedImage.TYPE_INT_ARGB);
static {
Graphics2D g2 = img.createGraphics();
g2.setColor(Color.RED);
g2.drawRect(0, 0, 24, 24);
g2.fillOval(15, 7, 10, 10);
}

@Override
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.translate(100, 100);
g2.scale(-1, 1);
g2.drawImage(img, 0, 0, this);
}

@Override
public void run()
{
while(true) {
repaint();
try {
Thread.sleep(60);
} catch (Exception e) {}
}
}
}
 

Bud6y

Mitglied
gibt es den keine möglichkeit um nur das Bild zu Spiegeln?, weil das ist mir etwas zu kompliziert ~.~
 

Geeeee

Bekanntes Mitglied
Wenns dir zu komplex ist, dann nimm einfach ein zweites Bild, was schon vorher im Speicher liegt. Bzw. das Bild sofort "aktivieren", wenn du links bzw. dann wieder rechts drückst. Dann muss es nicht während des paint-Aufrufs geladen werden.
Das hat den Vorteil, dass du dann bei langem Links-Laufen nicht immer wieder die Transformation berechnen musst.
Ist irgendwie ne Interpretationssache: Ich denke mir, die CPU-Belastung einer ständigen Berechnung ist größer als die Speicherbelastung durch ein zweites Bild.
 

Quaxli

Top Contributor
Würde ich auch so machen. Meist brauch man ja noch ein bißchen mehr als nur links und rechts, dann kann man das gleich in ein Bild packen.

Beispiel von mir:

quaxli-albums-test-picture18-copter1.gif
 

slawaweis

Bekanntes Mitglied
gibt es den keine möglichkeit um nur das Bild zu Spiegeln?, weil das ist mir etwas zu kompliziert ~.~

es gibt mehrere Wege, ein Bild zu spiegeln. Der kürzeste geht über die Funktion:

Graphics (Java Platform SE 6)

[highlight="java"]
if(walking_left)
{
int ix = 0; // Image X
int iy = 0; // Image Y
int iw = stance_1.getWidth(null); // Image Width
int ih = stance_1.getHeight(null); // Image Height
g.drawImage(stance_1,
x_pos_left, y_pos_up, // X und Y der linken oberen Ecke der Zielfläche
x_pos_left+iw, y_pos_up+ih, // X und Y der rechten unteren Ecke der Zielfläche
ix+iw, iy, // rechte obere Ecke der Quelle wird auf die linke obere Ecke der Zielfläche gemappt
ix, iy+ih, // linke untere Ecke der Quelle wird auf die rechte untere Ecke der Zielfläche gemappt
parent);
}
[/highlight]

Der beste Weg geht über eine gespiegelte Kopie im Speicher, falls man genug Speicher hat :D

Slawa
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
windl EXIFF Header in ein Bild schreiben Spiele- und Multimedia-Programmierung 0
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
K Bild von USB-Webcam über JMF Spiele- und Multimedia-Programmierung 2
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
K Bild berührt Bild Spiele- und Multimedia-Programmierung 29
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
A Bild einer Webcam auffangen Spiele- und Multimedia-Programmierung 20
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
lumo LWJGL - Bild rendern Spiele- und Multimedia-Programmierung 16
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
F Bild im sourcecode Spiele- und Multimedia-Programmierung 32
F Bild einfärben Spiele- und Multimedia-Programmierung 5
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
M Bild kopieren Spiele- und Multimedia-Programmierung 2
S Bild capturen mit direcShow Spiele- und Multimedia-Programmierung 2
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
ARadauer bild in bild suchen Spiele- und Multimedia-Programmierung 6
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Bild spiegeln Spiele- und Multimedia-Programmierung 7
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
G Palette aus Bild extrahieren Spiele- und Multimedia-Programmierung 5
A Wasserzeichen auf Bild Spiele- und Multimedia-Programmierung 2
G Paintsurface ins Bild konvertieren Spiele- und Multimedia-Programmierung 8
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
F Bild generieren Spiele- und Multimedia-Programmierung 3
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
A Kein Bild Spiele- und Multimedia-Programmierung 3
T Bild als mehrdimesionaler Array Spiele- und Multimedia-Programmierung 4
H Bild von Webcam laden Spiele- und Multimedia-Programmierung 4
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G start Bild einfrügen in ein Java Spiel Spiele- und Multimedia-Programmierung 7
Quaxli off-topic: HDR-Bild errechnen Spiele- und Multimedia-Programmierung 3
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf Tastendruck bild verschieben Spiele- und Multimedia-Programmierung 5
O ich hab da ein problem mit nem bild Spiele- und Multimedia-Programmierung 8
C JPEG oder BMP Bild erstellen Spiele- und Multimedia-Programmierung 5
A Bild im Raum darstellen (Texture2D) Spiele- und Multimedia-Programmierung 4
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
N Bild zu zeichnen (drawImage) klappt nur manchmal?? Spiele- und Multimedia-Programmierung 8
P repaint verschiebt das Bild Spiele- und Multimedia-Programmierung 2
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
P 2D Bild drehen Spiele- und Multimedia-Programmierung 4
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
M RGB-Bild in Graustufen-Bild umwandeln Spiele- und Multimedia-Programmierung 2
M Bild-Spiegelung mit Java! Spiele- und Multimedia-Programmierung 5
S Bild auf Bild = Nichts? Spiele- und Multimedia-Programmierung 3
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
R Bild drehen Spiele- und Multimedia-Programmierung 24
J Bild generieren Spiele- und Multimedia-Programmierung 5
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
K Java2d Bild als JPG oder so speichern Spiele- und Multimedia-Programmierung 10
A "Wegnehm-Spiel" programmieren, Tipps + Links? Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben