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

Informatiker Board » Themengebiete » Informatik in der Schule » Pong Geschwindigkeit des Balls » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 4 Beiträge
as_string

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
Robert93

@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
as_string

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
Robert93 Pong Geschwindigkeit des Balls

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:
---