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

1

14.05.2016, 19:23

C# Windows Forms Jump and Run wie kann ich das mit der Kollision machen?

Für die Schule sollen wir ein c# Windows Forms Spiel machen.
Ich würde ein Jump and Run machen und habe auch schon das mit dem springen und laufen hinbekommen.
Aber ich weiß nicht wie ich das mit der Kollision machen soll.
Ich würde gerne wissen wie ich z.B. Platformen etc. machen kann auf die man springen kann ohne durchzufallen.

Kann mir da bitte jemand helfen?

LG Dommi :)

2

14.05.2016, 20:53

und ich wollte noch fragen wie man dass dann machen könnte das man nicht jedes "hindernis" einzeln überprüfen muss sondern alle mit einer funktion

pl3x

Frischling

Beiträge: 14

Beruf: Fachinformatiker Anwendungsentwicklung

  • Private Nachricht senden

3

14.05.2016, 21:03

Hey,

es gibt die Rect.Intersect Methode. Mit dieser sollte man das prüfen können.
https://msdn.microsoft.com/de-de/library…=vs.110%29.aspx

Ich würde das einfach als Event bauen. Wenn du mir deine Projektmappe zukommen lässt könnte ich auch versuchen ein kurzes Beispiel einzubauen.

Grüße
Daniel

4

14.05.2016, 21:12

Hey,

es gibt die Rect.Intersect Methode. Mit dieser sollte man das prüfen können.
https://msdn.microsoft.com/de-de/library…=vs.110%29.aspx

Ich würde das einfach als Event bauen. Wenn du mir deine Projektmappe zukommen lässt könnte ich auch versuchen ein kurzes Beispiel einzubauen.

Grüße
Daniel

ich schicke es dir gleich ^^

pl3x

Frischling

Beiträge: 14

Beruf: Fachinformatiker Anwendungsentwicklung

  • Private Nachricht senden

5

14.05.2016, 21:35

Hey,

ich habe mal schnell reingeschaut. Wieso nutzt du nicht die Paint Methode der Form?

6

14.05.2016, 21:39

was macht die ^^? kenn mich noch nicht so aus ;D

pl3x

Frischling

Beiträge: 14

Beruf: Fachinformatiker Anwendungsentwicklung

  • Private Nachricht senden

7

14.05.2016, 21:53

Sie wird aufgerufen, wenn das Element neu gezeichnet wird.
Hier habe ich mal das grob gebaut. Musst halt noch irgendwo machen, dass der Spieler an die richtige Position gesetzt wird und das fallen aufhört.


C#-Quelltext

1
2
3
4
5
6
7
8
9
private void screen_Paint(object sender, PaintEventArgs e)
        {
            if (player.Bounds.IntersectsWith(box.Bounds))
            {
                // TODO: Implement logic to set player on top of the box. (Stop falling)
                jump = false;
                Console.WriteLine("Collision detected!");
            }
        }

8

14.05.2016, 22:00

jo danke ich probiers dann mal damit

9

14.05.2016, 22:26

wie könnte ich das jz machen wenn ich nicht nur eine box sondern mehrere hab um sie darin zu detecten?

pl3x

Frischling

Beiträge: 14

Beruf: Fachinformatiker Anwendungsentwicklung

  • Private Nachricht senden

10

14.05.2016, 22:52

So zum Beispiel.

Ich hole aus der Liste mit den Controls alle Elemente welche vom Typ Box sind. Anschließend prüfe ich ob eine der Boxen mit dem Spieler kollidiert ist. Falls eine Kollision aufgetreten ist, selektiere ich die Box welche mit dem Spieler kollidiert ist.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IEnumerable<Control> boxCollection = myControls.Where(control => control.GetType() == typeof(Box));
            bool isColliding = boxCollection.Any(box => player.Bounds.IntersectsWith(box.Bounds));


            if (isColliding)
            {
                Control collidedBox = boxCollection.FirstOrDefault(box => player.Bounds.IntersectsWith(box.Bounds));

                if (collidedBox != null)
                {
                    // do something here
                }
                else
                {
                    // do other things^^
                }
            }

Werbeanzeige