Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

1

16.02.2009, 21:48

Ball bewegt sich nicht gleichmäßig...

hi,
hab grad so ein kleines Pong Game am laufen nur mein Ball bewegt sich nicht gleichmäßig schnell, obwohl ich die Zeit mit einbezieh liegt des vllt. an der Funkton App.GetFrameTime() von sfml hier is ein kleiner codeauszug:

C-/C++-Quelltext

1
2
3
4
5
float random1 = sf::Randomizer::Random(1,-1);
                
xball = speed * App.GetFrameTime();
                
yball = speed * random1 * App.GetFrameTime();

...oder hab ich irgendetwas falsch gemacht
New Project: Operation CityRacer

2

16.02.2009, 22:14

Äh, wenn du in jeder Frame die Zufallsgeschwindigkeit neu auswürfelst, MUSS es doch ungleichmäßig (bzw. zufällig sein).
Lieber dumm fragen, als dumm bleiben!

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

3

17.02.2009, 12:30

also wenn ich des random1 rausmachen bewegt er sich immer noch ungleichmäßig und die Zahl bei random tu ich doch nur mal eins nehmen und 5*1 oder 5*-1 bleibt ja die gleiche Zahl.....
New Project: Operation CityRacer

4

17.02.2009, 12:46

Wie befüllst du denn Speed? Was macht App.GetFrameTime()?
Setz random1 einfach mal "1".

Gruß
Markus

5

17.02.2009, 13:01

Hm, auf jeden Fall täte etwas mehr Code gut.
Lieber dumm fragen, als dumm bleiben!

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

6

17.02.2009, 14:18

C-/C++-Quelltext

1
float speed = 300.0f;



und App.GetFrametime = zeit seit dem letzten Frame

dat is wenns von oben oder unten abprallt oder an den playern abprallt

C-/C++-Quelltext

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
Ball.Move(xball, yball);
App.Draw(Ball);
            
if(Ball.GetPosition().y > 580)
            
{
                
yball = -speed * App.GetFrameTime();
            
}
            
if(Ball.GetPosition().y < 0)
            
{
                
yball = speed * App.GetFrameTime();
                
//cout << random1 << endl;

            
}

            
if(Ball.GetPosition().x < Polygon.GetPosition().x + 20 
&& Ball.GetPosition().x > Polygon.GetPosition().x + 10 
&& Ball.GetPosition().y < Polygon.GetPosition().y + 74 
&& 5 + Ball.GetPosition().y > Polygon.GetPosition().y )
            {
                
random1 = sf::Randomizer::Random(-1,1);
                
xball = speed * App.GetFrameTime();
                
yball = speed * random1 * App.GetFrameTime();
                
cout << random1 << endl;
                
            
}
            
if(Ball.GetPosition().x > Com.GetPosition().x -4 
&& Ball.GetPosition().x  < Com.GetPosition().x + 10 
&& Ball.GetPosition().y < (Com.GetPosition().y + 75) 
&& Ball.GetPosition().y > Com.GetPosition().y - 5)
            
{
                
random1 = sf::Randomizer::Random(-1,1);
                
xball = -speed * App.GetFrameTime();
                
yball = speed * random1 * App.GetFrameTime();
                
cout << random1 << endl;
                

}
New Project: Operation CityRacer

7

17.02.2009, 14:57

Ich würde den ganzen Code nochmal komplett umkrempeln.
Du solltest in 2 Varaiblen die Ballgeschwindigkeit speichern, und dann den Ball jeweils um diese Geschwindigkeit bewegen. Und nur da rechnest du dann die Framerate ein, die Geschwindigkeit wird z.B. in Pixel/Sekunde gemessen und in deren berechnung fließt daher nie die Framrate ein.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige