Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » Pong Geschwindigkeit des Balls » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Pong Geschwindigkeit des Balls
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Robert93
Grünschnabel


Dabei seit: 25.08.2014
Beiträge: 8

Pong Geschwindigkeit des Balls Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo Leute,
Eigentlich nur ne kurze Frage:

ich habe hier ein Pong Spiel in Java programmiert, dass weitestgehend auch funktioniert. Allerdings wollte ich die Geschwindigkeit des Balls ändern. Diese wird über die BallMovement Klasse eingestellt. Und zwar unten bei der 4:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
package pack1;

import java.util.Timer;
import java.util.TimerTask;

public class BallMovement {
Timer move;
	public BallMovement() {
		move = new Timer();
		move.scheduleAtFixedRate(new TimerTask() {
			
			@Override
			public void run() {
				
				Var.ballx += Var.balldirx;
				Var.bally += Var.balldiry;
				
			}
		}, 0, 4);
	}

}


Ich habe die 4 mit einer Variable v (die in der Variablen Klasse Var steht) ausgetauscht. Also:

code:
1:
2:
3:
4:
5:
6:
7:
8:
	public void run() {
				
				Var.ballx += Var.balldirx;
				Var.bally += Var.balldiry;
				
			}
		}, 0, Var.v);
	}



Wenn ich den int Wert der Variable v in der Variablen Klasse manuell ändere, also: v=4, v=3, v=2 usw. dann ändert sich auch die Geschwindigkeit des Balles wie gewühscht. Nun wollte ich das mit der Kollision verbinden. Sobald eine Kollision mit einem Schläger stattfindet soll der Ball schneller werden (also Var.v--).

Hier die Kollisionsklasse:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
package pack1;

import java.util.Timer;
import java.util.TimerTask;

public class BallKollision {
Timer Kollision;
	public BallKollision() {
		Kollision = new Timer();
		Kollision.scheduleAtFixedRate(new TimerTask() {

			@Override
			public void run() {

				if(Var.bally+50 >= Var.screenheight) {
					Var.balldiry =-1;
				}
				
				if(Var.bally <= 0) {
					Var.balldiry = 1;
				}
				
				if(Var.ballx + 20 >= Var.screenwidth) {
					
					Var.ballx = Var.screenwidth/2 -10;
					Var.bally = Var.screenheight/2 -10;
					
					Var.balldirx = -1;
					Var.playerPoints +=1;
					
				}
				
				if(Var.ballx <= 0 ) {
					Var.ballx = Var.screenwidth/2 -10;
					Var.bally = Var.screenheight/2 -10;
					
					Var.balldirx = 1;
					Var.gegnerPoints +=1;
					
				}
				
				if(Var.ballx < Var.x + 25 && Var.ballx > Var.x && Var.bally-20 <= Var.y + 150 && Var.bally > Var.y) {
                                        Var.v--;
					Var.balldirx = 1;
				}
				
				if(Var.ballx < Var.gegnerx && Var.ballx > Var.gegnerx -20 && Var.bally-20 <= Var.gegnery + 150 && Var.bally > Var.gegnery) {
                                        Var.v--;
					Var.balldirx = -1;
				}
				
				
			}
			
		}, 0, 4);
	}

}


Die Kollsion funktioniert auch ohne Probleme. Und auch wenn ich v in der Konsole ausgebe, wird diese bei jeder Kollision um 1 verringert. Aber die Geschwindigkeit des Balls ändert sich nicht. Und das verstehe ich nicht. Kann mir jemand helfen?

Meine Ideen:
---

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Robert93: 07.08.2018 10:59.

07.08.2018 10:58 Robert93 ist offline Beiträge von Robert93 suchen Nehmen Sie Robert93 in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Der Schedule at fixed rate wird ja nur einmal angelegt und zwar mit der Zahl, die Du ihm in den Moment übergibst. Wenn Du einen Variablenwert reinreichst, wird der Zahlenwert kopiert und dem Schedule ist es danach egal, ob sich die Variable nochmal ändert oder nicht.

Gruß
Marco
07.08.2018 15:25 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Robert93
Grünschnabel


Dabei seit: 25.08.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

@Marco: Okay danke, sowas ähnliches habe ich mir schon irgendwie gedacht. Wie löse ich denn dann dieses Problem? Wie würdest du das machen? Danke für deine Hilfe smile
07.08.2018 15:56 Robert93 ist offline Beiträge von Robert93 suchen Nehmen Sie Robert93 in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich würde bei einer konstanten Auffrischungsrate bleiben, aber die Werte, die ich zu x und y addiere variieren. Addiere ich in jedem Schritt 2, ist es schneller. Ich würde mir dann auch Fließkomma-Zahlen für die Koordinaten merken und den Wert erst beim Zeichnen runden. Dann kannst Du auch 1,5 oder 0,5 zur Koordinate addieren.

Gruß
Marco
11.08.2018 16:56 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Informatik in der Schule » Pong Geschwindigkeit des Balls