Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Komische Farben bei Sprites?!?!?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Felix



Anmeldungsdatum: 22.01.2008
Beiträge: 41
Wohnort: Breisach

BeitragVerfasst am: 06.02.2008, 17:51    Titel: Komische Farben bei Sprites?!?!? Antworten mit Zitat

Hallo, ich habe heute Mittag ein Programm geschrieben, das meinen Roten Pacman von links nach rechts laufen lässt, während er den Mund bewegt (pac1 und pac2) und im Hintergrund ein anderes Bild angezeigt wird. Hier der kleine Code:

Code:

dim shared back(0 to 639, 0 to 479) as integer  'Groeße des Arrays
dim shared pac1(1000) as integer                'gesammtgröße des arrays
dim shared pac2(1000) as integer                '   "          "   "
dim x as integer
screen 18                       '640x480 x 256 Farben

bload "Billardkugel.bmp"        '2-Farben bmp laden (Schwarz-Weiß)
get (0,0)-(639,479), back       'und in Array speichern
cls

bload "pman.bmp"                '256-Farben bmp
get (0,0)-(49,49), pac1         'laden und davon die erste Hälfte in pac1
get (50, 0)-(100, 49), pac2     'und die 2. Hälfte in pac2 speichern
cls                                 
put (0,0), back                 'An Pixel 0,0 (links oben)
                                'array "back" ausgeben (Billardkugel)
for x = 1 to 640 step 5         'For-Schleife für Pacman-Bewegung (von Pixel 1 bis pixel 640)
    cls                         'Clearscreen
    put (0,0), back             'An Position 0,0 Inhalt von back platzieren
    put (x, 200), pac1          'an Position x, 100 Inhalt von pac1 platzieren
    sleep 100                   '100 ms warten (wegen flimmerns und Geschwindigkeit)
    x=x+5                       'X+5
    cls                         'wieder clearscreen
    put (0,0), back             'An Position 0,0 Inhalt von back platzieren
    put (x, 200), pac2          'an Position x, 100 Inhalt von pac1 platzieren
    sleep 100                   '100 ms warten (wegen flimmerns und Geschwindigkeit)
next


end


Soweit so gut, es klappt wunderbar, mit dem einzigen Fehler, dass wenn der Pacman über eine andere Farbe als Schwarz gleitet, auch er eine andere Farbe bekommt. Zudem sind bei dem Hintergrund die Farben verfälscht.




Kann mir das jemand erklären oder Lösungsvorschläge bringen? Ich bin mit meinem Anfängerlatein am Ende lächeln

Gruß Felix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.02.2008, 19:17    Titel: Antworten mit Zitat

Der Befehl PUT hat einen Parameter, mit dem du die "Mischung" zwischen Hintergrund und Sprite verändern kannst. Standardmäßig ist da AND oder OR eingestellt, was eben die beiden Farben mit einem logschen Und / Oder verknüpft. Du benötigst für dein Sprite aber entweder die volle Deckung (PSET) oder die transparente Deckung (TRANS), bei der die Farbe Schwarz (bei 16 Bit und aufwärts: Magenta) gefiltert wird. Somit müsste dein Put-Befehl so lauten:
Code:
PUT (x,y), grafik, TRANS

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 06.02.2008, 20:04    Titel: Antworten mit Zitat

Wegen Hintergrund - da musst du im 32bit-Modus arbeiten, sonst hast du immer Probleme mit der Palette (oder du verwendest über all die selbe, ist aber komplizierter)

Screen 18, 32
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.02.2008, 20:05    Titel: Antworten mit Zitat

Cherry hat Folgendes geschrieben:
sonst hast du immer Probleme mit der Palette (oder du verwendest über all die selbe, ist aber komplizierter)

Na, so kompliziert ist das doch wirklich nicht grinsen Hat schließlich jahrelang funktioniert, warum sollte es nicht mehr funktionieren?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 06.02.2008, 22:03    Titel: Antworten mit Zitat

äh?

Wenn er ein mehrere Bilder mit verschiedenen Paletten im 8-bit Modus lädt, sieht alles ziemlich seltsam aus!

Edit: Achso. Aber wenn da einer ist, der einfach irgendwelche Bilder anzeigen will (die sowieso meistens 32bit sind), dann ist Screen 18, 32 einfacher und sinnvoller als alles andere!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 06.02.2008, 22:26    Titel: Antworten mit Zitat

Beispiele von mir aus der QB-Zeit:

http://beilagen.dreael.ch/QB/SPR_DEMO.BAS
http://www.dreael.ch/QB/JUMPGAME.ZIP

Wenn man in QB keine Option wie PSET hinten bei PUT angibt, so findet immer eine XOR-Verknüpfung mit dem Hintergrund statt, was manchmal etwas seltsam anmutende Verfärbungen bewirkt, sobald der Hintergrund nicht mehr aus lauter "COLOR 0"-Pixeln besteht.

Als Abhilfe war es daher damals üblich, mit einer AND-Maske zuerst den Hintergrund sihouettenförmig "freistanzen" und dann das eigentliche Sprite noch mit XOR drüberzeichnen. So wird es übrigens auch in den oberen Beispielen gemacht.

Wie ich aber soeben sehe, scheint dieser Umweg mit der neuen TRANS-Verknüpfungsoption nicht mehr notwendig zu sein.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.02.2008, 22:36    Titel: Antworten mit Zitat

Cherry hat Folgendes geschrieben:
Edit: Achso. Aber wenn da einer ist, der einfach irgendwelche Bilder anzeigen will (die sowieso meistens 32bit sind), dann ist Screen 18, 32 einfacher und sinnvoller als alles andere!


Wer wirklich ein 8-Bit-Spiel designen will, muss natürlich schon zu Beginn an eine gemeinsame Palette denken, und das geht ohne Probleme...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Felix



Anmeldungsdatum: 22.01.2008
Beiträge: 41
Wohnort: Breisach

BeitragVerfasst am: 07.02.2008, 09:24    Titel: Antworten mit Zitat

So,
ersma vielen dank für eure Antworten. grinsen grinsen
Ich hab das jetz ma schnell geändert (also den Screen 18,32) und es kompiliert, aber jetzt sieht alles voll verwirrt aus (nur schwarzer Hintergrund und der Pacman sind ein paar verzerrte undefinierbare Pixel happy ) Liegt wohl daran dass ich die Bilder noch nich in 32 Bit BMP's umgewandelt hab. Werd ich gleich mal machen. lächeln
Gruß Felix

EDIT: Ok, mit den 32 Bit funktioniert alles super. Danke!! happy happy happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz