Bewegung falsch

BDG

Aktives Mitglied
HeyLeute.
In c# hatte ich eine klasse, in der eine Münze erstellt wurde und durch die Luft geflogen ist...
Diese habe ich GENAU so in Java gemacht.
Allerdings bewegt sich die Münze völlig falsch und man sieht sie irgendwie garnicht...
hier wie ich sie erstelle :

Random random = new Random();
Coin coin = new Coin(random.nextInt(80-(-80)+1)+-80, random.nextInt(150-(50)+1)+50);
coins.add(coin);

das erste soll ein random-wert zwischen -80 und 80 sein, und das zweite zwischen 150 und 50.


Und hier die Klasse coin : [Java] Coin.java - Pastebin.com
Gezeichnet wird halt so :
for (Coin coin : coin)
{

coin.Draw(...);
}
 

BDG

Aktives Mitglied
Steht eig. im ersten Beitrag ganz unten ^^
Mit einer foreach schleife :
for (Coin coin : coins)
{
coin.Draw(g, ie);
}
 
M

Marcinek

Gast
Und da überschreibst du paintComponent()?

Und was bedeutet "falsch" dargestellt?

Wieviele münzen sind es?

Weißt du, wann und wie oft diese Methode aufgerufen wird?
 

BDG

Aktives Mitglied
man sieht die münze in der einen Sekunde noch ganz oben irgendwo, und dann is sie weg.
Normal, also in c#, sollte die münze einen bogen nach oben machen, und dann auf dem boden immer apprallen und irgendwann leigen bleiben ...
 

BDG

Aktives Mitglied
Hier nochmal die Update Methode :
Java:
@Override
	public void run()
	{
		while (frame.isVisible())
		{
			tilemap.Update();
			spieler.Update();
			
			
			
			computeDelta();
			
			
			repaint();
			
			
			
			try {
				Thread.sleep(10);
			}
			catch (InterruptedException e) {}	
		}	
	}

und in figur.Update ist eben die schleife wo dann die coins geupdatet werden...
das gleiche mit draw.
 

BDG

Aktives Mitglied
Woran kann das denn liegen ? :(
Die Klassen sind doch komplett gleich, in Java und in c#...
Und in Java gehts nicht und in c# schon....
 

Jango

Gesperrter Benutzer
Steht eig. im ersten Beitrag ganz unten ^^
Mit einer foreach schleife :
for (Coin coin : coins)
{
coin.Draw(g, ie);
}


Foreachschleifen gibt es in Java so nicht, da sie für C# erfunden wurden. Wie sowas in Java realisierbar ist, kann man in jedem Buch nachlesen.
Nicht jeder Code ist 1:1 gleich...;)
 

BDG

Aktives Mitglied
Ja, aber fast 1 zu 1 ! Ich hab nur die minimalen änderungen vorgenommen, bei den schleifen und so.
aus foreach (Block block in blocks) wird for (Block block : blocks)
Und da ist ja kein Unterschied...
Sieht man denn am Code (siehe erster Beitrag, pastebin-link ) irgendwas falsches ?
 

Noctarius

Top Contributor
Foreachschleifen gibt es in Java so nicht, da sie für C# erfunden wurden. Wie sowas in Java realisierbar ist, kann man in jedem Buch nachlesen.
Nicht jeder Code ist 1:1 gleich...;)

Du wirst es nicht glauben, aber es gibt tatsächlich Zeiten da hilft erst denken, dann nachlesen und zum Schluss den Stuss nicht schreiben den man auf der Zunge hat. Dann steht man auch nicht so blamiert da.
Foreach loop - Wikipedia, the free encyclopedia
 

BDG

Aktives Mitglied
Oke, Danke ;D Aber ob die foreach schleifen jetzt extra für java erfunden wurden oder nicht, ist mir eigentlich garnicht mal so wirklich das wichtigste an der Sache :(

Also wenn es euch hilft kann ich auch das ganze projekt hochladen oder so :(
Und von mir aus auch das c# Projekt...
Also so sollte aus aussehen mit den Coins :
c# + XNA : CoinBox Hero Alpha 1.2 [Nachmache] - YouTube
Aber in meinem Java Projekt sieht man sie nur ganz kurz, dann sind sie sofort weg, und dann wieder da und die bewegen sich völlig falsch und alles :(
 

Marco13

Top Contributor
Der Java-Code würde schon helfen. Bevorzugt (wenn's nicht sooo viel ist) in einem Stück, das man direkt rauskopieren, compilieren und starten kann.
 

Crian

Top Contributor

Nur so nebenbei:

1) Wäre es netter, den Code hier in Java-Tags zu schreiben.

2) Werden Methodennamen in Java anders als in C# mit einem Kleinbuchstaben begonnen. Also
Code:
update()
und
Code:
draw()
.

Ich hole 1) mal für die anderen Leser nach:

Java:
public class Coin{

	float jumpValue, grav, magvalue;
    boolean jump = true;
    float coinPositionX, coinPositionY, directionX, directionY;
	
    Image coinImage;
    
    public Coin(float directionX, float jumpValue)
    {
    	this.directionX = directionX;
    	this.directionY = jumpValue;
    	this.jumpValue = jumpValue;
    	
    	doInitializations();
    }
    
    public void doInitializations()
    {
    	coinPositionX = 285;
    	coinPositionY = 455;
    	grav = 2f;
        magvalue = 1.8f;
        
        coinImage = Toolkit.getDefaultToolkit().createImage("coinBoxCoinKlein.png");
    }
    
    
    public void Update()
    {
    	
    	if (jump)
        {
            directionY = -directionY * 4;
            jump = false;
        }

        
        coinPositionY += directionY;
        coinPositionX += directionX;
        directionY += grav;
        if (coinPositionY >= 270)
        {
            grav = 1190f;
        }
        if (coinPositionY <= 270)
        {
            grav += 50f;
        }
        

        if (coinPositionY >= 400)
        {
            //change direction! 
            coinPositionY = 400;
            directionY = -directionY / 40 * 25;
            if (directionY >= -80)
            {
                directionX = 0;
                directionY = 0;

            }
        }
    }
    
    
    public void Draw(Graphics g, ImageExample ie)
    {
    	g.drawImage(coinImage, (int)coinPositionY, (int)coinPositionX, ie);
    	
    }
    
}
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Nein. Das ist halt Konvention. Einer der Vorteile bei Java (meiner Meinung nach) ist der, dass ich auf einen Blick sehe, ob ein Aufruf eine Klassenmethode oder Instanzmethode ist. Welche Bezeichner in meinem Code eindeutig! Klassen sind und welche lediglich Variablen darstellen.

Sowas macht Code um Längen lesbarer. Ich hasse dieses Rätselraten in fremden Code.


Zu deinem Problem: Zeig doch mal den Code der das ganze benutzt.
 

BDG

Aktives Mitglied
Okeee :
Java:
//Liste :
public List<Coin> coins = new ArrayList<Coin>();

//KeyPressed Methode :

if(e.getKeyCode()== KeyEvent.VK_SPACE){
        	
			if (!space) space = true;
			
			
				Random random = new Random();
				int random1 = random.nextInt(80-(-80)+1)+-80;
				int random2 = random.nextInt(150-(50)+1)+50;
		        Coin coin = new Coin(random.nextInt(161)-80, random.nextInt(101)+50);      
		        coins.add(coin);
			
}

//Update :

for (Coin coin : coins)
		{
			coin.Update();
		}

//Draw :

public void Draw(Graphics g, ImageExample ie)
	{
		
		g.drawImage(figur, (int)x, (int)y, ie);
		
		for (Coin coin : coins)
		{
			coin.Draw(g, ie);
		}
		
	}
 

BDG

Aktives Mitglied
Ich hab jeweils nur den relevanten COde gepostet, weil in der Klasse ist auch noch die ganze Seteuerung der Figur etc.
 

Marco13

Top Contributor
Ja, das führt irgendwie zu nichts. Debuggen wirst du früher oder später ohnehin selbst müssen. Am besten mit einem Debugger (deswegen heißen die Dinger so :D ) oder mit sowas wie
Java:
    public void Update()
    {
...
        System.out.println("Position vorher "+curPositionX+" "+curPositionY);
        System.out.println("Bewege um "+directionX+" "+directionY);

        coinPositionY += directionY;
        coinPositionX += directionX;

        System.out.println("Position nachher "+curPositionX+" "+curPositionY);
und schauen, wo wann der Fehler herkommt
 

BDG

Aktives Mitglied
Könnte es vielleicht sein dass es daran liegt : ?
Ich habe in c# so :

coinPosition.Y += direction.Y * (float)gameTime.ElapsedGameTime.TotalSeconds;

und in Java genau das gleiche nur ohne das mal...
Und wenn die elapsed GameTime unter 0 ist, dann whäre es ja kleiner, und alles whäre richtig :D
Weiß jemand wie ich dass so in Java mache ?
 

Marco13

Top Contributor
:autsch:

:noe:


Kommt drauf an was gameTime.ElapsedGameTime.TotalSeconds liefert.
Java:
class Game
{
    private long initialMS = -1;

    public static float getElapsedSeconds()
    {
        long currentMS = System.currentTimeMillis();
        if (initialMS == -1)
        {
            initialMS = currentMS;
        }
        long elapsedMS = currentMS - initialMS;
        float elapsedS = (float)elapsedMS / 1000.0f;
        return elapsedS;
    }
}
HACK!!! Aber jetzt kannst du das auch mit dem mal machen.
 

Marco13

Top Contributor
Das Video ist privat. Beschreibe den Fehler oder poste Code, das hier ist nicht das "Was könnte irgendjemand bei irgendwas falsch gemacht haben"-Quizforum.
 

BDG

Aktives Mitglied
:( Da will man einem einmal was leichter machen, in dem man gleich ein ganzes Video ( Grulala - YouTube ) schickt, wo man den Fehler sieht und schon meckert wieder jeder :(

Also wenn ich sehr viele Coins auf einmal erzeuge, dann stoppt das Programm, und in der Console steht :

Exception in thread "Thread-2" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at Figur.Update(Figur.java:117)
at ImageExample.run(ImageExample.java:65)
at java.lang.Thread.run(Unknown Source)

Wenn irh Code wollt, einfach sagen von welcher Klassse ihr wollt ^^
 

Marco13

Top Contributor
Nun, auf die Idee einen Fehler per Youtube-Video zu beschreiben, wo es ein Stacktrace und ein paar Zeilen code schon tun würden (und viel zielgerichteters Helfen erlauben würden) ist schon abwegig :bahnhof: Wenn du statt des Videos EINE Datei mit dem zusammenkopierten Quellcode gepostet oder auch (wenns sein muss) irgendwo hochgeladen hättest, hättest du am 19.08.2012 um ca. 10:22 schon ein funktionierendes Programm gehabt ;)

Dort wird eine Liste verändert, während darüber iteriert wird (evtl. von zwei verschiedenen Threads, wenn es beim Einfügen passiert). Poste den Code, wo etwas in diese Liste eingefügt wird, und wo sie verwendet wird.
 

Marco13

Top Contributor
Und für die Zukunft: In der Konsole auf den link (!)
at Figur.Update(Figur.java:117)
zu klicken würde dich schon zu der Stelle führen, wo was falsch läuft...
 

BDG

Aktives Mitglied
Java:
if(e.getKeyCode()== KeyEvent.VK_SPACE){
        	
			if (!space) space = true;
			
			
				Random random = new Random();
				int random1 = random.nextInt(80-(-80)+1)+-80;
				int random2 = random.nextInt(150-(50)+1)+50;
		        Coin coin = new Coin(random.nextInt(161)-80, random.nextInt(101)+50, stone);      
		        coins.add(coin);
			
		}

Da werden die erstellt ^^

Java:
	public void Update()
	{
		for (Coin coin : coins)
		{
			
			coin.Update();
		}

                [...]
       }


geuptdatet ^^

Java:
public void Draw(Graphics g, ImageExample ie)
	{
		
		
		for (Coin coin : coins)
		{
			coin.Draw(g, ie);
		}
		
	}

und gezeichnet ^^

Sonst eigentlich nichts ^^
 

Marco13

Top Contributor
In welchem Thread das "Update" passiert, ist noch ganz klar, aber zumindest ist es nicht der EDT, von daher..... ganz pragmatisch:

Java:
// Wo auch immer:
//List<Coin> coins = new ArrayList<Coin>(); // WEG
List<Coin> coins = Collections.synchronizedList(new ArrayList<Coin>()); // HIN

...



	public void Update()
	{
            synchronized(coins) // synchronized drum
            {
		for (Coin coin : coins)
		{
			
			coin.Update();
		}
           }

                [...]
       }

...
        public void Draw(Graphics g, ImageExample ie)
	{
		
            synchronized(coins) // synchronized drum
            {
		
		for (Coin coin : coins)
		{
			coin.Draw(g, ie);
		}
            }
		
	}
 

Crian

Top Contributor
Falls das Zeichnen etwas dauert, kann man vorher auch eine (tiefe) Kopie der Objekte anfertigen. Dann kann im Hintergrund sich ruhig schon weiter was dran ändern, das stört beim Zeichnen dann nicht.
 

BDG

Aktives Mitglied
Okee, vielen Dank Marco. Aber was macht dieses Synchronized ?
Damit ich das später auch mal alleine verwenden kann ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
J Bewegung des Roboters, schräg Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
Sogomn Flüssige Bewegung Java Basics - Anfänger-Themen 3
G Bewegung innerhalb eines Koordinatensystems berechnen Java Basics - Anfänger-Themen 9
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2
J Zufällige Bewegung Java Basics - Anfänger-Themen 25
T Snake-BlueJ Bewegung Java Basics - Anfänger-Themen 7
P Unsaubere Bewegung Java Basics - Anfänger-Themen 4
K Bewegung von Partikeln in einem Partikelsystem. Java Basics - Anfänger-Themen 5
H bewegung Java Basics - Anfänger-Themen 6
M Bewegung + Rotation eines Objektes Java Basics - Anfänger-Themen 2
P Flackern bei der Bewegung Java Basics - Anfänger-Themen 2
N Applet ruckelt solange Maus nicht in Bewegung? Java Basics - Anfänger-Themen 3
C Grafik flimmert bzw. flackert bei Bewegung Java Basics - Anfänger-Themen 11
G Ball-Bewegung Java Basics - Anfänger-Themen 19
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
O Warum ist die Auswahl falsch? Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
Kapfski Was habe ich falsch gemacht? Hilfe! Java Basics - Anfänger-Themen 17
R FXMLLoader Pfad falsch`? Java Basics - Anfänger-Themen 4
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
J String wird in GUI falsch ausgegeben Java Basics - Anfänger-Themen 10
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
J Was mache ich falsch in meiner Java Anwendung? Java Basics - Anfänger-Themen 11
N Javac -version der Befehl ist entweder falsch geschrieben oder...... Java Basics - Anfänger-Themen 8
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
A Ich habe das Gefühl etwas grundlegendes falsch zu machen Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
M Was ist daran falsch Java Basics - Anfänger-Themen 2
A Arrays addieren- Was mache ich falsch?? Java Basics - Anfänger-Themen 2
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
L AES - Irgendwas falsch? Java Basics - Anfänger-Themen 0
H Koordinaten gehen falsch ! Java Basics - Anfänger-Themen 13
I Programm von mir - keine Ahnung mehr ob richtig falsch:-( Java Basics - Anfänger-Themen 6
B Wieso wird hier so viel als falsch angezeigt? Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Was ist falsch? Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Was ist falsch? Java Basics - Anfänger-Themen 23
D Prozente werden falsch berechnet Java Basics - Anfänger-Themen 8
F for Schleife zählt falsch Java Basics - Anfänger-Themen 6
S Variable wird falsch gesetzt Java Basics - Anfänger-Themen 5
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
D Aktuelles Datum wird falsch ausgegeben Java Basics - Anfänger-Themen 2
B Drucken: Default Paper von Drucker? Mein Drucker druckt falsch Java Basics - Anfänger-Themen 3
D Matritzenmultiplikation berechnet Werte falsch Java Basics - Anfänger-Themen 9
J ireport Designer / CSV / Sonderzeichen was läuft falsch Java Basics - Anfänger-Themen 7
W Was ist bei folgendem Code falsch? Java Basics - Anfänger-Themen 5
C Array wird falsch befüllt? Java Basics - Anfänger-Themen 7
L Methoden Histogramm, Methode berechnet falsch. Java Basics - Anfänger-Themen 7
Silvascus Was mache ich falsch? Java Basics - Anfänger-Themen 15
L Variable an andere Klasse weitergeben - Was mache ich falsch? Java Basics - Anfänger-Themen 2
C Variablen if Anweisung falsch gesetzt Java Basics - Anfänger-Themen 4
J Java rechnet -0.94 + 0.01 falsch Java Basics - Anfänger-Themen 14
J Dekrement läuft offenbar falsch Java Basics - Anfänger-Themen 6
X Warum ist das falsch -.- Java Basics - Anfänger-Themen 4
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
J Java: Was habe ich falsch gemacht? Java Basics - Anfänger-Themen 4
T Input/Output GregorianCalender gibt falsch aus? Java Basics - Anfänger-Themen 4
F Byte Ausgabe plötzlich falsch Java Basics - Anfänger-Themen 0
O Zeitmessung falsch Java Basics - Anfänger-Themen 7
J Klassen Fehler Datei kopieren - was mache ich falsch Java Basics - Anfänger-Themen 19
C Ausgabe vom Array falsch ? Java Basics - Anfänger-Themen 3
S Mengenklammer falsch, Warum? Java Basics - Anfänger-Themen 6
J BlueJ öffnet package falsch Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
H Punkte werden falsch verbunden Java Basics - Anfänger-Themen 6
F String wird richtig in konsole geschrieben aber falsch an Methode übergeben Java Basics - Anfänger-Themen 8
K Runnable oder Keyadapter läuft falsch Java Basics - Anfänger-Themen 4
U Attributsnamen korrekt oder falsch? Java Basics - Anfänger-Themen 4
M .jar wird falsch generiert? Java Basics - Anfänger-Themen 9
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
M Classpath Jar nicht ausführbar, Classpath warscheinlich falsch Java Basics - Anfänger-Themen 10
D Warum ist diese Interfacedeklaration falsch? Java Basics - Anfänger-Themen 5
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
M Was ist daran falsch ? Java Basics - Anfänger-Themen 5
M ; Fehler. Was ist falsch? Java Basics - Anfänger-Themen 4
K Was ist hier Falsch? Java Basics - Anfänger-Themen 3
B Eclipse zeigt code als falsch an Java Basics - Anfänger-Themen 19
R Ausgabe wird falsch angezeigt! Java Basics - Anfänger-Themen 14
O BufferedImage drehen, falsch positioniert Java Basics - Anfänger-Themen 5
L Erste Schritte Was mach ich falsch? thx Java Basics - Anfänger-Themen 3
M Erste Schritte Nachkommastellen falsch bei Rechnung Java Basics - Anfänger-Themen 3
E Kann mir jemand sagen was hier falsch ist? Java Basics - Anfänger-Themen 6
X cmd stellt falsch/zu weinig dar Java Basics - Anfänger-Themen 4
A Variablen Was mache Ich falsch? Java Basics - Anfänger-Themen 5
K Array fehler... was mach ich falsch? Java Basics - Anfänger-Themen 3
M Erste Schritte Jcreator falsch eingerichtet? Java Basics - Anfänger-Themen 10
W Was ist falsch? Java Basics - Anfänger-Themen 14
P Java rechnet falsch! (ab 6stelligen Zahlen) Java Basics - Anfänger-Themen 14
T Diagrammwerte werden falsch herum angezeigt Java Basics - Anfänger-Themen 6
A was mache ich falsch? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben