Polygone (Kopfzerbrechen)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Polygone (Kopfzerbrechen)

    Ich habe nebenbei an einem Pinball Constrution Set gebastelt (unter anderem um den Umgang mit GMPhysics zu üben) und bin hänge mal wieder an unscheinbaren Problemen fest.
    Man kann schon ein bischen Flippern, seinen eigenen Pinball bauen, speichern und laden. Nur mit dem Polygontool selbst erstellte Teile funktionieren zwar, aber nicht nach dem Speichern / Laden. Außerdem weigert sich das Programm, bestimmte Winkel korrekt umzurechnen. (Siehe Thread Polygonzug) In einigen Fällen führt das dazu, daß quasi gar kein GMPhysics Polygon zustande kommt (also keine Kollision mit dem Ball)
    In dem Programm gibt es nur 3 Skripte, die alle vom Pbjekt part_maker aufgerufen werden, und genau da sind auch die Probleme.

    Ach so:
    STRG-E edit
    STRG-L load
    STRG-S save
    SHIFT Ball einwerfen
    Schläger: Pfeiltasten
    Bilder
    • snapshot.jpg

      34,83 kB, 664×569, 201 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Melancor ()

  • Du wirst mich prügeln für meinen Programmierstil, ich weiß. Das liegt wieder mal daran, daß das ganze als Experiment anfing und nie richtig geplant war. Wenn Variable part_maker.meshedit=5 ist bedeutet das, daß dieses kleine Textmenu erscheint... Im draw-event (ehem) erfolgt dann der Aufruf add_mesh () wenn Text "done" gewählt wurde.

    Wobei ich gerage feststellen muß, daß bei der letzten Version nicht mal das funktioniert (omg) Wieder mal klasse von mir. In dem Skript add_mesh steht in Zeile 57:

    Quellcode

    1. add_vertex (cp,meshlist_x[i-1],-meshlist_y[i])

    Das muß heißen:

    Quellcode

    1. add_vertex (cp,meshlist_x[i],-meshlist_y[i])


    Von den 3 Figuren im Bild wird die Nummer 1 nicht richtig erstellt, wenn man sie im Uhreigersinn zeichnet (dann müßten alle Winkel negativ sein). Irgendwie funzt dieser Code nicht:

    GML-Quellcode

    1. // Der Polygonzug muß rechtsrum geschlossen werden
    2. // wurde er linksrum geschlossen, muß die Reihenfolge der Punkte umgekehrt werden
    3. // dafür dient die Variable total
    4. total=0
    5. w1 = point_direction(meshlist_x[0],meshlist_y[0], meshlist_x[1],meshlist_y[1]) // vom 1. zum 2. punkt
    6. if w1 >=180 w1 =-(360-w1) // in den Bereich -180 bis +180 verschieben
    7. for (i=1;i<v_count-2;i+=1)
    8. {
    9. w2 = point_direction(meshlist_x[i],meshlist_y[i], meshlist_x[i+1],meshlist_y[i+1]) // von jedem punkt zum jeweils nächsten
    10. if w2 >=180 w2 =-(360-w2); winkel= w2 - w1
    11. if winkel >=180 winkel =-(360-winkel) else if winkel <=-180 winkel =(360-winkel)
    12. total += winkel; w1 = w2
    13. }
    14. if total >0 // linksherum gezeichnet - umkehren
    15. ...
    16. ...
    Alles anzeigen


    Aber daß das load_all nicht funzt, nervt mich viel mehr !

    Übrigens, da ich bisher nur trianglefan drin habe, gibt es beim draw filled (der automatisch kommt wenn man done klickt) manchmal Fehler bei Konkaven. Dafür ist die Option "move origin". Der Kollisionskörper wird aber korrekt gebildet.
    Bilder
    • snapshot.gif

      2,36 kB, 291×302, 140 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Melancor ()

  • Ich weiß jetzt, warum beim Laden die Teile falsch sind. Offenbar geht bei file_text_read_real das Vorzeichen verloren (übrigens auch Nachkommastellen). Das war mir neu! In der Datei stehen die Zahlen nämlich korrekt. Das Bild zeigt die Werte vor und nach dem Speichern und Laden.

    Habe alle revevanten real-Variablen in Strings umgewandelt - jetzt gehts. Gelöst.
    Bilder
    • Neu Bitmap.jpg

      46,22 kB, 553×408, 78 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Melancor ()