Panel Collider

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von simi576.

    Panel Collider

    Hey
    Bin noch Anfänger in Visual Basic aber lerne schnell ;)

    Ich bin momentan ein kleines Tetris Spiel am entwickeln jedoch weis ich nicht wie Ich einen Collider für Panels mache.
    Ich habe es so versucht:

    VB.NET-Quellcode

    1. ​If Pan.Bounds.IntersectsWith(Pan.Bounds) Then
    2. collision = True
    3. End If


    Jedoch Collidiert er dann durchgehen was ja auch klar ist.
    Jedoch weis ich nicht wie es sonst machen soll da ich die Panels so mache:

    VB.NET-Quellcode

    1. ​nummer = (CInt(nummer) + 1).ToString
    2. Pan = New Panel
    3. Pan.Name = "Panel" & Convert.ToString(nummer)
    4. Pan.Left = x
    5. Pan.Top = y
    6. Pan.Height = 25
    7. Pan.Width = 25
    8. Pan.BackColor = Color.Blue
    9. Controls.Add(Pan)
    10. Timer1.Interval = timerint
    11. Timer1.Enabled = True
    12. plays = True
    13. Button1.Enabled = False


    Ich hoffe ihr könnt mir helfen
    Zu allererst sei gesagt, dass man generell keine Spiele mit Controls programmiert, denn die sind dafür einfach nicht geeignet. Spiele werden mit einer Engine geschrieben, die dann bspw mit GDI+ oder DirectX die Daten visualisiert.
    Soviel dazu. Dein Code wirkt recht unstrukturiert. Meine Vorschläge wären:
    -richtige Benennung von Variablen und Controls
    -Option Strict ON
    -und was ist denn bitte "nummer" für ein Datentyp? Es scheint so, als wäre es ein String, aber du konvertierst ihn auch zu einem String
    -Rechnen tut man mit Zahlen, nicht mit Strings
    -Nutze die ToString()-Methode, über die jedes Object verfügt.
    -Setze nicht die Kanten, sondern nutze die Point-Methode

    Aber um auf dein Problem zu kommen: Ich denke für deine Zwecke reicht die Rectangle-Klasse. Aber wie bereits gesagt, Controls sind dafür ungeeignet. Für sowas benutzt man zB einen GraphicsPath und somit GDI+.

    LG
    ich frag erstmal die grundlegendste Grundlage ab: Visual Studio - Empfohlene Einstellungen falls du du noch nicht hast, dann ist das jetzt dran.

    zu deim "Code" kann man nicht viel sagen, ja Panel sind ungeeignet, aber diese verlorenen Zeilen ergeben ja auch keinerlei sinn. Sehen aus, als ob beliebig aus verschiedenen Methoden zusammenkopiert.

    Also Tetris ist vonne Grafik her besonders einfach, da könntest du ein DatagridView missbrauchen als Map.
    guggemol FightingSnakes, da sind DGVs in dieser Weise in Gebrauch.

    Allerdings - wie eiglich jedes Spiel - gibt es auch die Datenmodell-Seite, also die Tetris-Tatsache, dass eine Figur aus mehreren Feldern besteht, die in bestimmter Weise angeordnet sind - das muss man modellieren.
    Ich könnte mir eine Figur so vorstellen, dass sie eine Position (X/Y) in der GesamtMap beinhaltet, und dann eine Liste von X/Y - Elementen relativ zur Position, die die Figur beschreiben.
    Und eine Kollision liegt vor, wenn sich 2 Figuren finden, bei denen ein Element + Figur-Position denselben X/Y - Wert aufweist.

    Hihi - ich glaub nicht, dass meine Ausführungen leicht verständlich sind (und meine Links sinds auch nicht), aber du lernst ja schnell, sagst du.

    Aber nochmal: Die Grundeinstellungen sind erstmal das wichtigste, vorher brauchst du nichts weiter zu versuchen.
    Erstmals danke für die Tipps.
    Ich denke du meinst das ungefähr so:

    a1a2a3a4a5
    b1b2b3b4b5
    c1c2c3c4c5
    d1d2d3d4d5
    e1e2e3e4e4

    Und dann sagt man einfach die Textur oder was auch immer wird in a1 angezeigt und da könnte man theoretisch im falle von Tetris, zum Beispiel das L so machen:
    a1a2a3a4a5
    b1
    Xb2
    b3b4b5
    c1
    Xc2
    c3c4c5
    d1
    Xd2
    Xd3
    d4d5
    e1e2e3e4e5


    Jedoch habe ich momentan keinen Plan, wie ich das umsetzten soll.
    Ich werde erst mal denn Link genauer anschauen.
    Wie gesagt bin noch Anfänger und weis halt nicht genau, wie man sowas angeht.
    Habe je eigentlich schon früher anfangen wollen zu programmieren, jedoch wenn man nicht weis wie man anfangen sollte ist das gar nicht so einfach ^^.
    jo, in die Richtung.

    Also dein L hätte im von mir vorgeschlagenem Datenmodell die Position b2, und es hätte die Elemente a1,b1,c1,c2.
    Also in deiner Schreibweise, die sehr von Excel beeinflusst ist.

    In .net würde man das mathematisch sehen, als Punkte, mit X/Y Werten. Und mathematisch gesehen fängt man bei 0 an zu zählen, nicht bei 1.
    Also in .Net-Schreibweise hätte das L die Position 1/1, und die Elemente 0/0, 0/1, 0/2, 1/2.

    vlt. fängst du mit einer Klasse an, namens Figure, und die hat 2 Properties, wie gesagt: Position As Point und Elements As List(Of Point).
    Naja bevor ich weiter mache, werde ich erstmals den Beitrag von SpaceyX und dir denn du mir geschickt hast durchlesen.
    Hoffe das ich was lerne :). Dann schaue ich mal mit meinem kleinem Tetris weiter ^^.