Softwaresprite

Es gibt 59 Antworten in diesem Thema, welches 8.686 mal aufgerufen wurde. Der letzte Beitrag (24. Dezember 2011 um 14:16) ist von hoogo.

  • Ich habe ein 8x8-Zeichen, welches eine Blume ist.
    Jetzt habe ich mit Chardings die Zahlen 0-255 jeweils als ein Zeichen selbst gezeichnet, ganz oben immer in den obersten vier Zeilen.

    Jetzt möchte ich in einem neuen Zeichen beides gleichzeitig haben.

    Irgendeine effeziente Idee?

  • Ich sehe schon, das ist so schwer, daß ich hier Selbstgespräche führen werde.

    I

    Noch zum ersten Problem:

    ORA macht das schon ganz gut und auch schnell in Assembler, aber da die selbstgemalten Zahlen unterschiedlich groß sind und immer oben rechts in der Ecke stehen, reicht das nicht aus.

    Denn ich möchte, daß die Leerstellen innerhalb des Zahlenblocks jeweils oben rechts nicht überschrieben werden UND es zudem einen Rand darum gibt der leer bleibt.

    Frage: Hat jemand eine Idee?

    I I

    Weiteres Problem:

    Ich habe eine Pflanze als Char (beispielsweise), die ich schön mittig in einen Viererblock packen möchte, in dem sonst kein Viech oder so ist.

    Frage: Hat dazu jemand eine clevere Idee?

  • hehe, Leute, eine nette Art zu sagen, daß ich wieder "spinne".

    Zitat

    was er eigentlich will?

    Da der C64er bekanntlich nur 8 süße nette knuddelig liebe Sprites hat - ich hoffe, man kann mir folgen :wink: - und ich mehr als soviel "böse" Pflanzen habe, die dummerweise oft zwischen Zeichen hängen, möchte ich in vier leere Zeichen erstmal das Pflanzenzeichen mittig einfügen. Nennt man doch Softwaresprite?

    Und zweitens - vorher erstens - habe ich die Zahlen 0-255 äußerst eng und in unterschiedlichen Größen mit Charpad als Zeichen jeweils oben rechts gezeichnet. Zu dumm ORA macht zwar die Zeichen auf die Pflanze, z.B., aber ich möchte, daß die Leeren Pixel um und in den Zahlen 0 dabei bleiben.

    Hoffentlich ist klarer geworden, was ich meine. :sad:

  • wenn etwas leer sein soll, dann eben mit AND ausmaskieren. d.h. zu dem ORA Bitmuster brauchst du noch ein AND Bitmuster mit den Bits die "leer" bleiben sollen.

  • Ich sehe schon, das ist so schwer, daß ich hier Selbstgespräche führen werde.


    vermutlich ist das eher wieder so trivial, dass es schwer nachzuvollziehen ist, wo nun eigentlich das Problem liegt. Für das, was Du vorhast genügt eigentlich rudimentäres Wissen von Binärzahlen und Aussagenlogik. Wenn es nicht Hires, sondern MC sein soll, dann käme noch etwas Know-How in Sachen C64 Multicolormodi hinzu.
    Das Grundsätzliche hat das Roland schon hübsch zusammengefasst.

  • Also ich, für meinen Teil, finde SW-Sprites jetzt nicht so ganz trivial.
    Da würde ich mich jetzt gar nicht so spontan rantrauen bin aber gespannt auf die Ausführungen.
    Gruß

    Wenn einer, der mit Mühe kaum, geklettert ist auf einen Baum, schon meint, daß er ein Vogel wär, so irrt sich der.

    Wilhelm Busch

  • 1.PROBLEM DRÜBERSCHREIBEN UND WICHTIGE LEERSTELLEN oben rechts NICHT ÜBERSCHREIBEN

    Zitat

    wenn etwas leer sein soll, dann eben mit AND ausmaskieren. d.h. zu dem ORA Bitmuster brauchst du noch ein AND Bitmuster mit den Bits die "leer" bleiben sollen

    Du wirst lachen, so habe ich das aktuell gemacht. Problem: Teuer. Sehr teuer.

    Und ich möchte die 256 Zeichen (weil max. 4 Zeilen benutzt werden) in die Hälfte reinmachen. Mit Deiner Lösung lasse ich die inversen Bits ausrechnen und die kommen dann in neue. Ich brauche also 512 Zeichen insgesamt.

    2.PROBLEM ZEICHEN BELIEBIG POSITIONIEREN, WENN 2x2Zeichen auf dem Textbildschirm komplett frei sind (erstmal)

    Im aufwendigen C Code habe ich aktuell mitlerweile das hinbekommen. Jeden Pixel einzeln überlegt sich das Programm dabei. Ich frage mich nur, ob ich es nicht ganz einfach hinbekommen könnte?

  • Dann mal so, wie ich es verstanden habe:
    8x8 Softwaresprite:

    Code
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X


    Heisst 4 Zeilen nun 4 Zeichen- oder 4 Pixelhohe Zeilen? Naja egal, nehmen wir das extreme an. 4 Zeichzeilen:
    Also die obersten Zeilen in ein Buffer kopieren:

    Code
    S S S S S S S S -> Buffer
    S S S S S S S S -> Buffer
    S S S S S S S S -> Buffer
    S S S S S S S S -> Buffer
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X


    und nun nach Rolands Methode die Zahlen mit AND / OR rüberkopieren... von rechts nach links natürlich, damit der Rest bleibt, wenn es keine Zehner oder Hunderter gibt.
    Hier "Hunderter, Zehner + Einer":

    Code
    S S H H Z Z E E
    S S H H Z Z E E
    S S H H Z Z E E
    S S H H Z Z E E
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X


    Bevor eine Zahl geändert wird, immer erstmal die Daten aus dem Buffer zurückschreiben.
    So hat man bei "nur Einer":

    Code
    S S S S S S E E
    S S S S S S E E
    S S S S S S E E
    S S S S S S E E
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X


    bei "Zehner und Einer":

    Code
    S S S S Z Z E E
    S S S S Z Z E E
    S S S S Z Z E E
    S S S S Z Z E E
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X
    X X X X X X X X

    Das war nur ein spontaner erster Hirnschiß, aber ich bin ziemlich sicher, dass es so funktionieren kann. Ja, man braucht natürlich da für jedes "Softsprite" nochmal die Hälfte davon im Speicher (bzw. um genau zu sein in meinem Beispiel eigentlich "nur" einen 6x4 Block) "doppelt". Wenn man die Zahlen kleiner macht, wird es dementsprechend weniger.

    Wahrscheinlich geht es noch schlauer. Bzw. ich lasse mich gerne eines besseren Belehren, wenn ich mich irre und das nicht so einfach geht, wie ich es mir vorstelle.

  • Gute Idee!

    Mein Zahlenzeichensatz sieht konkret folgendermaßen aus, siehe Bild. Man kann erkennen, daß die Zahlschrift variert und das soll so sein.

    Ich möchte aber betonen nochmal, daß ich zwei Schwierigkeiten habe:

    1. Die Zahl über die Bombe, welche nach 0 explodiert.
    2. Das Positionieren einer Pflanze im leeren Raum als Zeichen aber schön mittig in vier 2x2 Zeichen rein.

  • Okay, also die Zahlen sind ja nur ein Char groß, das geht ja noch. Jetzt raff ich aber auch was Du meinst mit der Größe.
    Ich kann das nicht genau erkennen, aber wenn Du zwei Größen und von jeder Größe gleich viele hast, kannst Du die der Größe nach sortieren (z.B. 3 Pixel hoch von 0-127 und 4 Pixel hoch von 128-255). Dann kann man aber natürlich nicht mehr so einfach "durchzählen".
    Eventuell fällt Dir noch eine andere Sortierung ein, die ein guter Kompromiss ist zwischen Abzählbarkeit und Größensortierung (evtl. gerade/ungerade).

    Das mit der Bombe verstehe ich nicht. Und mit dem 2x2 ebenfalls wieder nicht. Meinst Du jetzt Chars oder Pixel?

  • "Software-Sprites" sind mir auch zu hoch - bzw. kann ich mir keine Hardware-Sprites vorstellen.

    Ich ahne nur mittlerweile anhand der Screenshots, dass es um sowas wie (softscrollende???) animierte Charsetgrafiken geht, womöglich mit dynamischem Zeichensatz...???

  • Vernunftdings: Kannst du evtl. ein Mockup zusammenkleistern, damit wir uns vorstellen können, was genau du machen willst? Es kommt irgendwie nicht so klar rüber (Blume? Hä?)

    Generell: Wenn mal jemand ein ausführliches Beispiel für Software-Sprites plus Erklärung machen könnte, wäre das göttlich. Ich halte sowas wie bei Bubble Bobble, mit zahlreichen Blasen ziemlich schwierig. Da gehen einem doch ruckzuck die Zeichen aus, Überlappung sind Hölle, etc.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • wg. Softwaresprites im allgemeinen:
    Guckt Euch mal den ganzen Kram aufm Plus4/C16 an. Da macht man einfach idR keine "sanfte" Bewegungen. Sprich: Software-Sprite heißt in erster Linie Objekte, die größer als 1 Char sind zusammenhängend zu verwalten. Die Bits einzeln irgendwo rüberzuschieben ist gerade im Hinblick auf Multicolor-Zeug eher problematisch.

  • Die Cherrybomben sind bei mir genau ein Zeichen groß.

    Bitte melde dich an, um diesen Link zu sehen.

    Bisher sieht man meinen Cherry-Bomben nicht an, daß sie gleich in die Luft gehen. Darum die Zahl drüber.

    Da mir ständig schnell die 8 Sprites ausgehen, möchte ich in Zeichenebene die Bombe mit Zahl überall möglich positionieren, ohne ein einziges Sprite zu nutzen.

  • Gute Idee!

    Mache ich schon. Aber das Problem an Muliplexing ist, daß man so aber immer die Zahl über den Bomben gleich hat. Aber bei vierzehn Bomben können 14 versch. Zahlen drüberstehen. Das geht dann nicht mehr mit Muliplexing.

    Hast Du meinen Link reingezogen?

  • Zitat

    Das geht dann nicht mehr mit Muliplexing.


    wie kommst du denn darauf?