Hello, Guest the thread was viewed3k times and contains 18 replies

last post from kibo at the

Walking Sprite

  • Hallo Leute

    hoffe es macht euch nichts aus das ich hier jetzt auf deutsch schreibe.

    Ich war ja lange damit beschäftigt wie Sprite-Daten aus anderen Banken vom Mega65 einliest. Auf Discord und auch hier wurden mir immer sehr gut geholfen wie man das machen kann.

    Aber erst die kleine Einleseroutine von bubbob42 gab mir das Werkzeug in die Hand die ich brauchte.

    Habe heute auf die schnell mal ein kleines Basicprogramm geschrieben wo ein Männchen immer rechts und links läuft.

    Das ist jetzt nicht sonderlich großartig. Aber darauf kam es mir ja nicht an. Sondern auf die Anzahl der Sprites, hier sind es 12 Sprites die bei Bank 4 ab $40000 liegen. Der Sprite Pointer fängt bei $1000 an.

    Abgefragt werden sie so:

    Code
    1. WPOKE $40000,$1000

    Bild:


    Und hier die Disk-Image:

    basic-mega65.d81.txt

    Die Endung txt Bitte entfernen


    So mit diesen Wissen kann ich mich nun dran machen Basic-Games zu entwicklen.

  • Hi Snoopy


    ist so nicht ganz richtig. Wenn du in Bank 0 bleibst, brauchst du keine Pokes. Da greifen die Sprite-Befehle auf den Standartwert zurück.

    Aber weil ich ja meine meine Sprite-Daten in die Bank 4 gelegt habe, brauchen wir die Pokes um den Sprite Pointer neu zu setzten, leider.

    Aber so bleibt Bank 0 frei für das Basic Programm. :D

  • Wenn du in Bank 0 bleibst, brauchst du keine Pokes.

    Dann hat man aber dafür wenig Platz. ;)


    Mir schwebt ja in Gedanken sowas wie ein "Game-BASIC 65" vor, das dem Spieleprogrammierer hier auf dem MEGA65 kräftigt unter die Arme greift. Ganz ohne POKE und PEEK. Aber bräuchte ja alles Zeit und so ...


    Umso mehr Respekt für dein Programm! Macht echt Spaß, dem Männchen beim Laufen zuzuschauen! :)

  • Kurze Frage ... warum dreht sich das Sprite wenn es nach Links läuft alle paar Sekunden um ? Als wenn da kurz ein falsches Sprite vom nach-rechts-laufen eingeblendet wird :gruebel


    Hab den Sleep Wert für links mal erhöht, kann man denke ich ganz gut erkennen (jede 6. Sprite Animation) ...


    [External Media: https://youtu.be/wz-Tu-fZ9_8]

  • Jo, das habe ich auch festgestellt. Aber ich konnte das nicht richtig ausbügeln. wenn ich eine Animationsphase weg lasse. Sieht es auch blöd aus.

    Vielleicht hat hier jemand eine Idee wie das noch flüssiger laufen kann.

    Und weis jemand wie das mit dem Befehl Colison funktioniert. Bin da irgendwie nicht durchgestiegen wie man das mit der Hintergrundkollision macht.

    Denn es gibt ja nur Sprite - Spritekollision, Sprite - Daten-Kollision und der Lichtgriffel. Ist mit Sprite - Datenkollision der Hintergrund gemeint ?

  • So Leute

    habe mein kleines Programm etwas geändert. Den Sleep-Befehl heraus genommen. Statt dessen einen Zähler verwendet.

    Habe auch herausgefunden warum mein Sprite zuckte. Habe den Sprite-Pointer mit falschen Zahlen gefüttert. :schande:


    Also hier nocheinmal das Progrämmchen

    basic-mega65.d81.txt


    Werde mich nun mal mich mit dem Befehl Collision beschäftigen.

    Hat das schon jemand gemacht ?

    Mir geht es hauptsächlich Sprite Hintergrundkollission

  • Drachen, Danke für die Info :)

    Hatte mir auch überlegt, die Sprites an ganz anderer Stelle zu parken. Aber kam bisher auf keinen grünen Zweig.
    Ich glaube ohne deine Hilfe, hätte ich das Handtuch geschmissen.

    Ist zwar schon ein paar Tage her seit dem Post ... ja, "Sprite-Data" ist Hintergrund.
    Aber ich denke du hast es mittlerweise selbst schon herausgefunden :)

  • Werde mich nun mal mich mit dem Befehl Collision beschäftigen.

    Hat das schon jemand gemacht ?

    Mir geht es hauptsächlich Sprite Hintergrundkollission

    Wie heute hier festgestellt, macht genau das auf einem MEGA65 Probleme. Mit dem Emulator geht es.

    So am Wochenende habe mal wieder etwas Zeit mich damit zu beschäftigen. Bin gespannt auf was für Problemich noch zusätzlich stoßen werde.

    Aber vielen Dank für die Infos hier, habe sie mit wachsamen Augen verfolgt. :)

  • Ich blicke da nicht ganz durch! ?(

    In $D06C-$D06E wird die Adresse $40000 abgespeichert und dort (bei $40000) werden

    die Nummern der Sprites hochgezählt (WPOKE $40000,$1000+PL)?

    Ich versuche gerade Dein ( Drachen ) Programm für den "normalen" Speicher (ohne Bank-Switching)

    umzuschreiben.

    Benötige ich dann trotzdem die Adresse $D06C-$D06E?

    Wie setzt sich die Zahl 128 + 4 in Zeile 20040 zusammen bzw. was bedeutet SPRPTR16?

    Und ist 128 nicht BIT 8 bzw. die Zahl 4 BIT 3? Wo ist mein Denkfehler?

    Sehe ich das richtig dass man -um Sprites zu animieren- durch mehrere Sprites durchschaltet?

    Also müsste ich meine Sprites ab Position $600 positionieren und entsprechend ansprechen oder?

  • Hi Mr. Jones,


    damit wirst du dann eventuell Probleme bekommen. Wenn du auf Bank 0 bleibst, hast du nur Platz für 8 Sprites bei der Standarteinstellung vom Mega65.

    Nämlich von $0600-$07FF - 512 bytes sprite definition area.

    Deswegen liegen ja meine Sprites ja bei $40000

    Jop und für eine Animation schalte ich die Spritepointer durch.

    Hoffe es hilft dir ein wenig, denn ich habe in letzter Zeit nicht mehr viel gemacht mit dem Mega65.

  • Liegt der Pointer im 40 Zeichen Modus woanders?

    Die Spritepointer findest du in den Adressen $d06c bis $d06e (dez. 53356-53358). Einfach mal den Screen umschalten und gucken ob sich da etwas ändert.

    Mehr dazu steht in der Chipset Reference auf Seite 30.

  • Die Spritepointer findest du in den Adressen $d06c bis $d06e (dez. 53356-53358).

    Das ist echt merkwürdig.

    Im Emulator klappt es mit der "Bewegung" wunderbar aber mein echter M65 streikt und zeigt nur ein Sprite.

    Der M65 und der Emulator geben mir bei 53356 jeweils eine 248 aus.

    Wenn ich nun im Emulator eine 249 poke, dann wird das Sprite von Position 1 auf 0 verschoben.

    Bei den M65 passiert allerdings gar nichts.