Scrollbares Berichtfenster (viewport??)

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Donald Agu

BeitragMo, März 14, 2005 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Jungs, vielen Dank erstmal für eure Bemühungen.

Ich hab inzwischen mein ganzes schönes Spiel auf DoubleBuffering umgeschrieben und es ist KAPUTT Crying or Very sad

also eher gesagt, die ergebnisse sind mehr als mies:
es flimmert bei jedem "cls" (wohlgemerkt: es ist ein TEXTSPIEL), außerdem sehe ich bei Eingaben immer wieder andere Screens aufflackern, manchmal sehe ich die richtige Seite, manchmal die falsche etc.etc.etc.

könnte natürlich auch daran liegen, dass ich das "flip" bisweilen falsch platziert habe, aber ich denke ich hab's so gemacht wie in euren Beispielen. Oder gibts da vielleicht noch andere bestimmte Regeln, die man diesbezüglich befolgen muss, vielleicht mit Eingaben oder so? Oder darf man "Flip" nur in Schleifen verwenden? Wo kommen eigentlich die kleinen Babys her? Embarassed Ob's Schalke diesmal schafft? Was ist eigentlich ein Hedge-Fond? Very Happy

auf jeden fall sehe ich bisher überhaupt keinen anreiz, das mit dem DB so zu lassen... und es muss doch IRGENDWIE möglich sein, das tolle beispiel von rallimen auch mit single buffering umzusetzen, das mit dem scrollen, meine ich. Geschwindigkeitsprobleme gibt's bei meinem Spiel sicher net Wink

BladeRunner

Moderator

BeitragMo, März 14, 2005 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstens:
Ein sinnvoll strukturiertes Game kommt mit einem(!) Flip aus. Dann flimmerts auch nicht.

Zweitens:
Es sind -glaubs mir- Basics sein Game mit DB auszustatten. Das muss laufen.

Drittens:
Es ist eben vonnöten, Text zu nutzen und Input() durch eine kleine Routine zu ersetzen. Davon gibt es mehrere im Codearchiv. Auch zu DB gibt es Tuts.

Viel Erfolg.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Donald Agu

BeitragMo, März 14, 2005 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir Leid, dass ich schon wiede Terror machen muss Embarassed , aber:

ich habe einige Input-Befehle, auch ne simpelste 3-Zeilen Inputfunktion.
dass da irgendwo der Fehler drinsteckt, liegt nahe.

aber:

Zitat:

Es ist eben vonnöten, Text zu nutzen und Input() durch eine kleine Routine zu ersetzen. Davon gibt es mehrere im Codearchiv.


ich habe mir mal einige dieser "kleinen Routinen" im codearchiv mal angeschaut Laughing also, das sind ja tausend spanische Dörfer, und zudem so groß wie New York!

aber wie ist es zu erklären, dass ich zuweilen den falschen Screen sehe bzw. Screens, die mich schon längst nicht mehr interessieren?? Confused

aber zurück zur Ausgangsfrage:
Ist es möglich, Rallimens Beispiel ooooohne DB umzusetzen? (*fleh*) Smile

AGU

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, März 14, 2005 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ist es möglich, Rallimens Beispiel ooooohne DB umzusetzen? (*fleh*)

Ohne das es flackert...... sehe ich keine Chance!
Mit Vwait und scanline könnte man das Flackern mindern, aber sicher nicht beseitigen!
[BB2D | BB3D | BB+]

BladeRunner

Moderator

BeitragDi, März 15, 2005 8:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
aber wie ist es zu erklären, dass ich zuweilen den falschen Screen sehe bzw. Screens, die mich schon längst nicht mehr interessieren??


das kommt -wahrscheinlich- daher dass du entweder:
- mehrere Flip im code hast oder
- Input mit DB benutzt oder
- deine Inputroutine falsch eingebunden ist.

Was zu deiner Frage (wir drehen uns im Kreise...) die Antwort bringt: am Besten gar nicht. Üb und lern bis das DB funktioniert.


Noch einmal das Prinzip des DB:

BlitzBasic: [AUSKLAPPEN]
Graphics x,y
SetBuffer BackBuffer()

blub=LoadImage (\"blub.bmp\")
; hier alles was geladen werden muss, dazu Variablendeklarationen etc.

Repeat

Cls ;den Backbuffer leeren (das Zeichenbrett vorbereiten)

DrawImage blub,xx,yy
Text 0,0,\"schnulldibull\"
;... hier kommt nach und nach alles was eingezeichnet werden muss. also auch der Aufruf zu eíner eventuellen InputRoutine

Flip ; der Backbuffer wird zum Frontbuffer und damit angezeigt. Dadurch wird der bisherige Frontbuffer zum Backbuffer (also zum neuen Zeichenbrett)

Until KeyHit(1) ; und das Spiel von vorne, bis esc. gedrückt wird

Function newinput$(bla$)
; blub

End Function
;hier kommt dann die Funktionsdefinition für die inputroutine. Und natürlich alle anderen Funktionen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Donald Agu

BeitragMi, März 16, 2005 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte tatsächlich mehrere "flip" in meinem Prog, aber trotzdem bin ich davon überzeugt, dass mein game zumindest HALBWEGS sinnvoll strukturiert ist Mad , aber lassen wir das jetzt, führt sowieso zu nix...

ich gebe mich geschlagen, ihr habt gewonnen!

aber ich hab immer noch ne Frage von vorhin, die (wie so viele andere Wink ) unbeantwortet blieb: Ist es möglich, evtl. mit Viewport, den Screen so anzulegen, dass er komplett beschrieben wird MIT AUSNAHME eines bestimmten Abschnittes? Wäre dann also das Gegenteil von Viewport sozusagen... Ich denke mir zwar, dass es geht, wüsst aber auch hier net wirklich, wie...

Ich hoff, ich geh euch net zu sehr auf die Nerven Embarassed

BladeRunner

Moderator

BeitragMi, März 16, 2005 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir hab nicht gewonnen. Es ist einfach nur ne Tatsache. Es geht hier ja nicht drum dich runter zu machen. Aber wenn ich dir helfe dann so dass du es richtig machst. Und dazu gehört DB unverzichtbarerweise dazu.

Ein "negativer Viewport" ist mit kleinen Umwegen machbar. Mich hat ne Grippe erwischt und ich bin nur kurz am Rechner, aber ich werde Dir morgen das Grundprinzip posten. Dann kannst Sie Schreiben.

Wenn Du allerdings DB nutzt, brauchst du keinen "AntiViewport" mehr.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

BladeRunner

Moderator

BeitragDo, März 17, 2005 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, der AntiViewPort:

Damit die Funktion richtig arbeiten kann benötigt sie folgende Angaben:
- obere linke Ecke des Viewport als x und y.
- Breite und Höhe des Viewport
- Koordinaten der zu überprüfenden Graphik (x,y) sowie deren handle

Jetzt wirds dann lustig.
Erstmal machst du ne Grobüberprüfung anhand der Koordinaten:

- wenn bild(x,y) > VP(x+b,y+h) dann liegt es ausserhalb, ebenso wenn bild(x+bildbreite,y+bildhöhe) <VP(x,y). Zu beachten hierbei dass ich es vereinfacht geschrieben habe, Du musst nämlich auf die Achsen einzeln prüfen).

- liegt das Bild komplett ausserhalb, super, zeichnen und fertig.

- nun die obige prüfung nochmal durchführen, allerdings "nur" auf die eigentlichen Grenzen des Viewports (bei x,breite und y,höhe minus der imgagebreite/höhe). So kannst du herausfinden ob das Bild komplett im
Viewport liegt.

- wenn ja sei glücklich, zeichne es nicvht und raus aus der Funktion.

- nun kommt der worst case. Alle noch nicht gefilterten Ergebnisse beinhalten bilder die teilweise verdeckt sind - im schlimmsten Fall liegt der Viewport innerhalb eines Bildes. Jetzt hilft nur eines - das Bild pixel für Pixel in einer For-Next-Doppelschleife durchgehen und für die einzelnen Koordinaten schauen ob sie innerhalb des Viewportes liegen. Wenn das nicht der Fall ist, auf den Imagebuffer des Bildes wechseln, das passende Pixel auslesen und dann in den Frontbuffer wieder eintragen. Um das Ganze zu beschleunigen kann man es auch in einer Bank zwischenkopieren.

Ich persönlich weise meinen Funktionen häufig noch eine Rückgabe zu um ihren Erfolg überprüfen zu können, aber das ist Geschmackssache.

So, viel Spass beim Erstellen deines Antiviewportes... Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Donald Agu

BeitragDo, März 17, 2005 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So, Danke erstmal Very Happy

Freue mich, dass der beschriebene Fall möglich ist, aber in meinem speziellen Fall (meinem TEXTSPIEL, das hattest du möglicherweise überlesen Smile ) gibt es ohnehin keine Probleme mit Überlappungen von Bildern in den Viewport-Bereich. Die Vp-Fläche soll eigentlich lediglich vom "cls" ausgeschlossen werden. Den Text da drin dann zu scrollen dürfte nach dem vielzitierten Beispiel von rallimen dann ohne Weiteres möglich sein. Und in nem Textspiel darf's ja IM NOTFALL auch ein bisschen flimmern 8)

AGU

BladeRunner

Moderator

BeitragDo, März 17, 2005 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Und - ich wiederhole mich - es gehört zum Grundrüstzeug, DB zu beherrschen. Dann kannst dir nämlich Funktionsmonster wie das oben beschriebene sparen (welches auch für Text umsetzbar wäre).

Aber wenn Du dir lieber viel Arbeit machen willst, Bitteschön.


Mit DB zeichnest/schreibst einfach alles im Hintergrund, Machst deinen Viewport, schreiben, flippen, fertig.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Donald Agu

BeitragFr, März 18, 2005 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich würd ja gern, aber dann gibts die bereits angesprochenen Probleme mit dem blöden Input und der Funktion

Code: [AUSKLAPPEN]

Function Input1$()
return chr$(waitkey())
end function


wobei ich keine Ahnung habe, was die Funktion überhaupt macht, weiß nur, dass sie im Prinzip das gleiche bedeutet wie die QB-Anweisung

Code: [AUSKLAPPEN]

input blabla$(1)


oder so...
also praktisch das Prog bis zum Tastenhieb anhält und die Eingabe in ner Variable speichert, in dem Fall nen String.


Außerdem ist mein Spiel bisher absolut auf FrontBuffering ausgelegt, daher bring ich nicht das ganze Prog mit einem Flip unter einen Hut... Crying or Very sad

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group