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:

Sprite zerstört trotz Hintergrund-Array den Hintergrund

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Off-Topic-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Crumbler



Anmeldungsdatum: 12.10.2005
Beiträge: 15

BeitragVerfasst am: 13.09.2007, 18:36    Titel: Sprite zerstört trotz Hintergrund-Array den Hintergrund Antworten mit Zitat

Hallo!

HIER EIN RIESEN-POST FÜR EIN RIESEN PROBLEM VON MIR

Bitte gebt mir keine Antworten wie "Forensuche bemühen" oder "MonsterFAQ zu rate ziehen", hab ich heute alles schon hinter mir.
weinen weinen weinen

Ich versuche mich seit gestern in Sprites - leider nur mit halbem Erfolg.

Nach eingehender Studie des MonsterFAQ, verzweifelter Suche nach nem Forum, dass genau oder wenigstens fast genau mein Problem behandelt und mehrerer Stunden Nachgrübeln resigniere ich nun vor folgendem:

Ich Speichere ein einfaches Viereck (LINE (1,1)-(10,10), 4, BF) in einem Array.

Dann möchte ich es über einen einfachen blauen Hintergrund laufen lassen, das funktioniert aber nicht richtig, entweder es flimmert, oder aber es zerstört den Hintergrund.

Ich habe auch dazu die Beiträge aus'm MonsterFAQ und ein paar tuts studiert, blicke aber nicht durch...

Unbewegliches Sprite - kein Problem, aber sobald ich es bewegen will check ichs nicht mehr...
Ich poste einfach mal den Code:

PS: ICH KANN MIR JA SCHON WENN ICH MEINEN CODE ANGUCKE DENKEN, DASS DAS FLIMMERN MUSS. ICH LEGE JA ZWEI UNTRANSPARENTE SPRITES UNMITTELBAR HINTEREINANDER IMMER WIEDER IM WECHSEL ÜBEREINANDER, ABER ICH WEIß ECHT NICHT, WIE ICH DAS UMFORMEN MUSS DAMIT ES FUNZT!!!

--------------------------------------------------------------------------------------
'Arrays festlegen

DIM hintergrund%(200)
DIM viereck%(200)



CLS
SCREEN 12


'Viereck generieren und ins Array abspeichern

LINE (1, 1)-(10, 10), 4, BF
GET (1, 1)-(10, 10), viereck%


CLS


' Hintergrund generieren

PAINT (639, 479), 9


'Bewegungs-Schleife

FOR bewegung% = 1 TO 400


'Brems-Schleife

FOR stopp% = 1 TO 32000: NEXT stopp%


'Hintergrund ins Array speichern

GET (1, 1)-(10, 10), hintergrund%


'Beide Arrays ins Bild einfgen
'Hab auch schon (blindlinks) alle m”glichen Kombinationen von AND, OR, XOR ausprobiert...

PUT (bewegung%, 1), viereck%, PSET
PUT (bewegung%, 1), hintergrund%, PSET

NEXT bewegung%

--------------------------------------------------------------------------------------

Danke schon mal im Voraus!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.09.2007, 18:51    Titel: Antworten mit Zitat

Der Grund ist recht einfach... frueher waren die rechner etwas langsamer, da haette man die problematik praktisch beobachten koennen happy

diese beiden Zeilen:
Code:

 PUT (bewegung%, 1), viereck%, PSET
PUT (bewegung%, 1), hintergrund%, PSET


die erste setzt das kleine viereck, die naechste loescht es aber sofort wieder....

du braucht noch zweil weitere variablen, die eine ALTE Position, des zuletzt gespeicherten hintergrunds festhalten... und der wird dann BEVOR du das kleine viereck anzeigst gesetzt....

musste es leider etwas anpassen grinsen
Code:

'--------------------------------------------------------------------------------------
'Arrays festlegen

DIM hintergrund(200) as byte
DIM viereck(200) as byte



CLS
SCREEN 12


'Viereck generieren und ins Array abspeichern

LINE (1, 1)-(10, 10), 4, BF
GET (1, 1)-(10, 10), viereck


CLS


' Hintergrund generieren

PAINT (639, 479), 9


'Bewegungs-Schleife
GET (1, 1)-(10, 10), hintergrund
dim bewegungalt as integer=1
FOR bewegung as integer = 1 TO 400


'Brems-Schleife

'FOR stopp as integer = 1 TO 32000: NEXT stopp
sleep (10)


'Hintergrund ins Array speichern

'Beide Arrays ins Bild einfgen
'Hab auch schon (blindlinks) alle m”glichen Kombinationen von AND, OR, XOR ausprobiert...
PUT (bewegungalt, 1), hintergrund, PSET
GET (bewegung, 1)-(bewegung+10, 10), hintergrund

PUT (bewegung, 1), viereck, PSET

bewegungalt=bewegung
NEXT bewegung

sleep

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Crumbler



Anmeldungsdatum: 12.10.2005
Beiträge: 15

BeitragVerfasst am: 13.09.2007, 19:07    Titel: Antworten mit Zitat

Danke für die schnelle Antwort, aber...

So ganz check ich das immer noch nicht, mit den ZWEI variablen...

Kennst du vielleicht ein Tutorial das sich mit dem Thema der sich bewegenden Sprites die den Hintergrund zerstören beschäftigt und das du mir empfehlen könntest???

Wäre echt nett wenn du mir da was nennen könntest!

Mfg
Crumbler
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crumbler



Anmeldungsdatum: 12.10.2005
Beiträge: 15

BeitragVerfasst am: 13.09.2007, 19:08    Titel: KOMANDO ZURÜCK! Antworten mit Zitat

Hatte die zweite antwort nicht gesehen...


Sorry...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.09.2007, 19:13    Titel: Antworten mit Zitat

das mit den Zwei Variablen meinte ich fuer die X und die Y Position (hatte Dein Beispiel bis dahin nicht ganz durchgesehen) in deinem Beispiel reichte ja auch eine Alte Position...

Ein Tutorial kann ich leider nicht empfehlen (vielleicht jemand anders hier)

Aber das Prinzip ist relativ einfach... der Hintergrund muss gespeichert werden, bevor das Sprite gesetzt wird... soweit so gut...
anschliessend wird das sprite gesetzt.....

beim naechsten mal muss zuerst der alte hintergrund gesetzt werden, dann muessen wir den neuen hintergrund speichern und dann wieder das sprite
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Crumbler



Anmeldungsdatum: 12.10.2005
Beiträge: 15

BeitragVerfasst am: 13.09.2007, 19:35    Titel: Antworten mit Zitat

Danke!
Auf ne ähnliche Lösung war ich heute Vormittag auch gekommen.
Hab das jetz so durchlaufen lassen wie du es modifiziert hast, flimmert aber immer noch extrem.
(Ich hab das Viereck mal vergrößert, da sieht man es ganz stark)

Kennst du vielleicht doch noch n tutorial wo ich mir das ganze nochmal anschauen kann?

Ich hab vor längerer Zeit mal eins gesehen, find jetz wo ichs brauch aber kein einziges!

Danke nochmal!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 13.09.2007, 19:46    Titel: Antworten mit Zitat

ganz korrekt kriegt man Transparente SPrites mit einer kombination aus AND und XOR hin...

wenn ich mich recht erinnere, geht's sorum:
Code:

PUT(x,y), maske, AND
Put(x,y), Sprite, XOR


dabei hat das Sprite einen schwarzen hintergrund. dort, wo im Sprite Pixel (ungleich scwharz) sind, ist die Maske Schwarz, dort wo das Sprite ist, ist die Maske Weiß. Somit bekommst du einen Transparenten Hintergrund.
_________________
» 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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.09.2007, 19:52    Titel: Antworten mit Zitat

muss ein recht 'langsamer' rechner sein happy
denn diese methode war bisher immer 'ausreichend'
es gaebe da noch zwei weitere moeglichkeiten...
die eine waere... das du einen buffer benutzt der die gesamte groesse ueberbruckt, zwischen der alten position und der neuen position und dann das gesammte auf den screen bringst... das sollte das flimmern erst einmal vermeiden.. allerdings kann man damit im wahrsten sinne keine grossen spruenge machen, da die 640k grenze recht schnell erreicht ist... die andere Methode waere sehr viel einfacher falls QB das unterstuetzt... Page Flipping, ein arbeiten auf mehreren Bildschirmseiten.....
dazu muesste aber mehr in der QB hilfe oder referenz stehen, oder es moege sich ein QBler dazu aeussern happy
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 13.09.2007, 19:59    Titel: Antworten mit Zitat

Ich weiß, dass das jetzt alles wieder nur ermahnend ist... Zunge rausstrecken
Aber bitte poste im richtigen Forum und mit angemessener Formatierung.
Hunderte Frage- und Ausrufezeichen und ewige Fett- und Großschreibung ist einfach nur unnötig und hebt nicht mehr hervor, dass dein Problem wichtiger ist, als Andere!

Danke für diese kleine Spende...
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crumbler



Anmeldungsdatum: 12.10.2005
Beiträge: 15

BeitragVerfasst am: 13.09.2007, 20:23    Titel: Antworten mit Zitat

@ Mao:
Sorry, ist erst mein dritter Post (überhaupt in einem Forum). Ich wusste nicht, dass man das nach Forenthema sortiert posten kann. Und mit der Fettschrift und so:Ich geb ja zu, war im Eifer des Gefechts ein bisschen viel.


@Eternal_pain:
Der Rechner sollte für QBasic mit 2,8Ghz eigentlich ausreichen, denke ich.zwinkern

@Jojo:
Wenn das Sprite still steht, funktioniert das auch recht gut mit der Transparenz, aber eben wenn es sich über den Hintergrund bewegen soll nicht...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.09.2007, 21:11    Titel: Antworten mit Zitat

2,8Ghz sollten bei weitem reichen, das es bei Dir flimmert versteh ich nicht so recht (mein PC ist nun auch nimmer der juengste, da flimmert nichts)

Aber vielleicht hilft das hier ja: (ein wenig in der Suche gewuehlt happy )

und nachdem Dreals Link ueberall aufgetaucht ist, auf Platz Nr1
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/ButterweicheAnimationen.html

http://forum.qbasic.at/viewtopic.php?t=1844&highlight=double+buffering

Hier gibts noch etwas:
http://forum.qbasic.at/viewtopic.php?t=244&highlight=double+buffering

Seltsamer Titel (dafuer sehen die Antworten umso hilfreicher aus grinsen )
http://forum.qbasic.at/viewtopic.php?t=2264&highlight=sprite
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Off-Topic-Forum 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