Tatsächliche größe eines Sprites, transparente Flächen weggerechnet

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

  • Tatsächliche größe eines Sprites, transparente Flächen weggerechnet

    Lang her, dass ich hier eine Frage gepostet habe, aber man hat ja früher oder später immer ein Problem, dass man nicht lösen kann.

    Also... Problem ist Folgendes:
    Ich habe ein Sprite, auf dem ein bestimmtes Objekt abgebildet ist. Wie ziehe zähle ich die Breite der Zeichnung ohne transparente Pixel? Ist das überhaupt möglich?

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

  • Original aus der Hilfe
    sprite_get_bbox_left(ind) Gibt die linke Kante der "bounding box" des sprites mit dem angegebenen Index wieder.
    sprite_get_bbox_right(ind) Gibt die rechte Kante der "bounding box" des sprites mit dem angegebenen Index wieder.
    sprite_get_bbox_top(ind) Gibt die obere Kante der "bounding box" des sprites mit dem angegebenen Index wieder.
    sprite_get_bbox_bottom(ind) Gibt die untere Kante der "bounding box" des sprites mit dem angegebenen Index wieder.

    Einfach bottom-top und right-left berechnen und du hast's.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • entweder du machst einfach mal "crop" im sprite editor und lässt überall nur 1pixel rand, oder du zählst per hand hab wie breit der vogel das objekt ist. Was ist daran so schwer?

    oder was meinst du mit:

    Wie ziehe ich die Breite der Zeichnung ohne transparente Pixel?

    weil ich kann nichts mit die breite ziehen anfangen
  • mir fällt da nur

    GML-Quellcode

    1. draw_getpixel(x,y)
    2. Gibe die Farbe zurück, die an der Position (x, y) im Raum vorhanden ist. Diese Funktion ist nicht sehr schnell, sei als vorsichtig.

    ein
    oder eben Bounding Box Prinzip in dem du die buchstaben alle in neue sprites packst und dann bbx auf automatische umrandung stellst und du diese koordinaten zur positionierung verwendest-

    Spoiler anzeigen
    Ich persönlich hätte da ja einfach 1 Font = 1 Gif mit 255 einzelbildern oder so genommen x'D
    (falls das subsprites sind also einzelne gif bilder dann steicht den spoiler xD)


    und als letzteres fällt mir nurnoch die pixel abzähl variante ein <- sinnvollste
  • Es ist natuerlich dein gutes recht fuer dich zu behalten was du eigentlich vor hast, aber es erschwert die Hilfe natuerlich... ich sehe auch nur diese 3 Moeglichkeiten:
    1. Du machst es (wie benny schon gesagt hat) mit einem Script, das nach dem getpixel Prinzip die Pixel prueft (du musst dafuer nicht drawen, das geht auch auf einer surface).
    2. Du erstellst dir ein Array, in das etwa so aussieht

    GML-Quellcode

    1. array[image_index]=image_breite
    ... wenn du mehrere Sprites hast, dann kannst du auch einen zweiten array machen, in dem die Spriteindizes der Sprites gespeichert sind und den anderen Array machst du dann zweidimensional. Problem ist natuerlich, dass du dann
    2a. Den Inahlt von array irgendwie manuell eintragen muesstest (also aber schon im Quelltext) oder
    2b. Du muesstest ein Script wie bei 1. benutzen, wobei sich dann fragt, ob 2 ueberhaupt noch Sinn macht (was je nach Verwendung sein koennte, da getpixel sehr langsam ist und man also alle Werte einmal anfangs in einem Array speichern koennte, was im Nachhinein Resourcen sparen koennte).
    3. Du regelst das ganze irgendwie anders, so dass du keine subsprites mehr hast
    Du kannt gut pixeln? Du hast Lust ein Spiel zu entwickeln? Dann schau mal hier vorbei:
    Lass uns ein Spiel entwickeln!
  • Der GM hat doch ne vordefinierte Funktion für Sprite-Fonts. Da kansnt du einen Font mittels Sprite und dessen Subimages erstellen und dabei auch bestimmen, ob die gesamte breite jeder subimage zählt oder nur die tatsächliche breite des Inhalts.
    Einfach mal in der Help im Font Kapitel schauen.
  • Das mag vielleicht eine sehr suboptimale und vorallem performancefressende Lösung sein, aber wie wärs mit dem Erstellen eines Objectes mit Sprite Index deines "Fonts" und deren Abfrage mit Hilfe von collision_point? Ich weis nicht, wie genau das is, fiel mir aber eben einfach ein^^
    "das war meine letzte flamewar PM an dich ."