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

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

11

16.08.2014, 17:20

Google in unter 3 Sekunden (Tastatur eingegeben, Enter gedrückt und ersten Link angeklickt).

12

16.08.2014, 17:24

Schön, denkst du, ich sei noch nicht auf die Idee gekommen? Und was bringt mir das, wenn ich einen Bewegungsvektor möchte? Ein Bewegungsvektor besteht doch aus einem Winkel und einer Länge, oder (ich hab das in der Schule noch net gelernt)? Den Vector2f, Vector2i und Vector2u kenne ich ja schon, die speichern aber nur 2 Zahlen.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

13

16.08.2014, 17:29

Ein Vektor speichert eine Richtung und einen Betrag.
Am besten guckst du dir noch mal an was Vektoren eigentlich sind: Wikipedia

Für dein konkretes Problem sehe das (pseudo) in etwa so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
Vector2 ballPosition = Vector2(100, 100); // Position 100|100 in Pixeln
Vector2 ballRichtung = Vector2(0.5, 0.9); // mal irgendeine Richtung
float ballGeschw = 10; // Geschwindigkeit in Px/Sekunde (z.B.)

ballRichtung.normalize();  // normalisieren bringt den Vektor auf Länge (Betrag) 1
ballRichtung.mult(ballGeschw); // bringt den Vektor auf Betrag 10, Richtung ist immer noch die selbe

void update(deltaZeit){ // deltaZeit = 1/FPS
    ballPosition.add(ballRichtung.mult(deltaZeit)); // addiert die Richtung*delta zur Position -> flüssige Bewegung

    // Ball zeichnen
}


Keine Ahnung wie die Methoden in SFML wirklich heißen, aber ich glaube das ist verständlich.

14

16.08.2014, 17:32

Ok, vielen Dank, dann hatte ich wohl was falsch im Kopf (hatte mich jetzt nicht konkret eingelesen, werde das aber nach dieser (mir peinlichen) Situation unbedingt nachholen).

15

16.08.2014, 17:34

Ganz einfach, du hast ja deine Schleife, die solange läuft, wie dein Fenster offen ist. In der fragst du einfach die aktuelle Position des Balles ab und addierst die gewünschte Geschwindigkeit hinzu, das einzige Problem ist, das der Ball sich so auf unterschiedlichen Systemen unterschiedlich schnell bewegt, das Problem kannst du aber auch lösen, ich glaube, das du da die Zeit vom Programmstart, bis zu dem Zeitpunkt, wo der Ball gezeichnet wird misst und diese dann hinzumultiplizierst. Aber um ein kleines Spiel für dich zu machen reicht es vollkommen aus, die Position + die Geschwindigkeit, also z.B. so, wenn du den Ball auf der X Achse bewegen willst : Ball.setPosition(Ball.getPosition().X + 1, Ball.getPosition().Y, Ball.getPosition().Z);
Das war jetzt ein Bsp. in C++ aber auch mit SFML ;)

16

16.08.2014, 17:39

@2310
Ist alles schon geregelt, läuft über die Zeit ;). Ich werde, wenn ich damit fertig bin, vielleicht das Projekt anhängen, damit ihr evtl. schauen könnt, ob ich alles richtig gemacht hab und dass andere Leute sehen können, wie man es machen kann.

Renegade

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

17

16.08.2014, 18:35

Ganz einfach, du hast ja deine Schleife, die solange läuft, wie dein Fenster offen ist. In der fragst du einfach die aktuelle Position des Balles ab und addierst die gewünschte Geschwindigkeit hinzu, das einzige Problem ist, das der Ball sich so auf unterschiedlichen Systemen unterschiedlich schnell bewegt, das Problem kannst du aber auch lösen, ich glaube, das du da die Zeit vom Programmstart, bis zu dem Zeitpunkt, wo der Ball gezeichnet wird misst und diese dann hinzumultiplizierst. Aber um ein kleines Spiel für dich zu machen reicht es vollkommen aus, die Position + die Geschwindigkeit, also z.B. so, wenn du den Ball auf der X Achse bewegen willst : Ball.setPosition(Ball.getPosition().X + 1, Ball.getPosition().Y, Ball.getPosition().Z);
Das war jetzt ein Bsp. in C++ aber auch mit SFML ;)


Den Begriff denn du da umschreibst ist "Timebased Movement".
Liebe Grüße,
René

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

18

16.08.2014, 19:30

Oder die ganzen nativen Spiele Apps auf Android? AngryBirds wurde bestimmt auch in Java geschrieben.
Da wäre ich mir nicht so sicher. Von den großen Apps (mehr als 5 Millionen Downlaods) verwendet über 50 % mindestens eine native Library (NDK). Und nur gut 8 % benutzen eine fertige Engine (Unity, libGDX, ...).
Hmm, aber die alte AngryBirds Symbian Version wird doch zumindest in Java geschrieben worden sein...
Aber gut lassen wir das. Ja Java wird für die Spieleentwicklung nicht die erste Wahl sein, aber dennoch gibt es Spiele (auch bekannte), die darin geschrieben wurden.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

16.08.2014, 22:53

Klar, Android-Spiele.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

20

17.08.2014, 18:45

So, ich hab mein kleines Pong fertig, Projekt im Anhang. Mich würde interessieren, wie ihr es für ein erstes Minispiel findet, speziell aber auch, was ich hätte besser machen können. Auch eine für mich wichtige Sache: Ich habe mir um die SFML ne Klassenstruktur drum gemacht (SfmlGame übernimmt Grundstruktur, dazu GameObject, um eigene Elemente coden zu können, damit das alles etwas mehr in richtung OOP geht) - ist das so der richtige Ansatz oder sollte ich lieber direkt auf die Funktionen der SFML zugreifen?

Grüße Stefan
»Solux« hat folgende Datei angehängt:
  • MiniPong.zip (899,65 kB - 51 mal heruntergeladen - zuletzt: 04.03.2024, 10:28)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Solux« (17.08.2014, 18:56)


Werbeanzeige