 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dj_Damy
Anmeldungsdatum: 18.10.2004 Beiträge: 30 Wohnort: Mainz
|
Verfasst am: 11.11.2005, 19:06 Titel: Doublebuffering Programm verschnellern |
|
|
Hey ihr!
Wie verschnellere ich dieses Programm?
Die Demo ruckelt ziemlich....
Ihr braucht net zu sagen "Benutz ne Lib", ich möchte
das selber machen
Code: |
REM *****************************
REM Double Buffering in SCREEN 13
REM *****************************
REM 2005 by Dj_Damy
rem ***************
DEFINT A-Z
DECLARE SUB Pixel (x, y, c)
DECLARE SUB Circ (x, y, radius, c)
DECLARE SUB ShowScreen (x1, y1, x2, y2)
DECLARE SUB ClearScreen (x1, y1, x2, y2)
CLS
SCREEN 13
DIM SHARED scr1(320, 50)
DIM SHARED scr2(320, 50)
DIM SHARED scr3(320, 50)
DIM SHARED scr4(320, 50)
REM ***************************** DEMOCODE *******************************
REM ********************
REM Datentyp deklarieren
REM ********************
TYPE WurmType
x AS INTEGER
y AS INTEGER
END TYPE
REM ***************
REM Array erstellen
REM ***************
DIM Wurm(10) AS WurmType
z# = 0
REM *************
REM Hauptschleife
REM *************
DO
REM *******************
REM Alte Grafik l”schen
REM *******************
ClearScreen 1, 1, 320, 200
REM *********************************************
REM Neue Positionen berechnen und Grafik zeichnen
REM *********************************************
FOR w = 1 TO 10
z# = z# + .05
Wurm(w).x = 160 + COS(z# - w / 4) * 50
Wurm(w).y = 100 + SIN(z# - w / 4) * 50
Circ Wurm(w).x, Wurm(w).y, 10, 31 - w
NEXT w
REM *******************************
REM Grafiken im Backbuffer anzeigen
REM *******************************
ShowScreen 90, 30, 230, 170
LOOP WHILE INKEY$ = ""
SUB Circ (x, y, radius, c)
FOR r = 0 TO (radius * 3.14) * 10 STEP 1
Pixel x + (COS(r / 10) * radius), y + (SIN(r / 10) * radius), c
NEXT r
END SUB
SUB ClearScreen (x1, y1, x2, y2)
FOR y = y1 TO y2
FOR x = x1 TO x2
IF x1 > 0 AND x2 <= 320 AND y1 > 0 AND y2 <= 200 THEN
IF y <= 50 THEN scr1(x, y) = 0
IF y > 50 AND y <= 100 THEN scr2(x, y - 50) = 0
IF y > 100 AND y <= 150 THEN scr3(x, y - 100) = 0
IF y > 150 AND y <= 200 THEN scr4(x, y - 150) = 0
END IF
NEXT x
NEXT y
END SUB
SUB Pixel (x, y, c)
IF x > 0 AND x <= 320 AND y > 0 AND y <= 200 THEN
IF y <= 50 THEN scr1(x, y) = c
IF y > 50 AND y <= 100 THEN scr2(x, y - 50) = c
IF y > 100 AND y <= 150 THEN scr3(x, y - 100) = c
IF y > 150 AND y <= 200 THEN scr4(x, y - 150) = c
END IF
END SUB
SUB ShowScreen (x1, y1, x2, y2)
FOR y = y1 TO y2
FOR x = x1 TO x2
IF x1 > 0 AND x2 <= 320 AND y1 > 0 AND y2 <= 200 THEN
IF y <= 50 THEN
DEF SEG = &HA000: POKE x + (y * 320&), scr1(x, y): DEF SEG
END IF
IF y > 50 AND y <= 100 THEN
DEF SEG = &HA000: POKE x + (y * 320&), scr2(x, y - 50): DEF SEG
END IF
IF y > 100 AND y <= 150 THEN
DEF SEG = &HA000: POKE x + (y * 320&), scr3(x, y - 100): DEF SEG
END IF
IF y > 150 AND y <= 200 THEN
DEF SEG = &HA000: POKE x + (y * 320&), scr4(x, y - 150): DEF SEG
END IF
END IF
NEXT x
NEXT y
END SUB
|
MFG,
Dj_Damy _________________ http://djdamy.speed-codings.de |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 11.11.2005, 22:33 Titel: |
|
|
Nettes Grundkonzept mit dem POKE :-) Zum Thema Animationen selber habe ich unter
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/ButterweicheAnimationen.html
meinen bekannten Animationsartikel (alles übrigens auch ohne irgendwelche Zusatz-Libraries).
Ich würde nach Möglichkeit schauen, mit SCREEN 7 zu arbeiten. Falls insgesamt 16 Farben genügen, aber Du die Palettentöne in VGA-Qualität setzen möchtest, dann lassen sich die Farben der DAC-Register mittels CALL INTERRUPT (andere werden jetzt wahrscheinlich auf OUT verweisen) setzen.
Kleines Beispielprogramm von mir, zum auf dieser Ebene herumspielen zu können:
http://beilagen.dreael.ch/QB/VGA_TEST.BAS
Schlussendlich könntest Du damit problemlos Deine feine Grauabstufung realisieren und hättest trotzdem auch PCOPY und SCREEN ,,x%,y% zur Verfügung. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Dj_Damy
Anmeldungsdatum: 18.10.2004 Beiträge: 30 Wohnort: Mainz
|
Verfasst am: 11.11.2005, 22:51 Titel: |
|
|
Zitat: |
Nettes Grundkonzept mit dem POKE
|
Danke
Nein, 16 Farben reichen leider nicht, ich brauch die 256 Farben.
Das Programm brauche ich nicht nur für die Graustufentöne
für diese Grafikdemo, ich wollte das eigentlich benutzen
um endlich ein flimmerfreies Spiel in Screen 13 zu schreiben.
Der Stahlrücklauf mit WAIT &H3DA,8,8 funzt net wirklich.
MFG
Dj _________________ http://djdamy.speed-codings.de |
|
Nach oben |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 11.11.2005, 23:06 Titel: |
|
|
Dj_Damy hat Folgendes geschrieben: | Der Stahlrücklauf mit WAIT &H3DA,8,8 funzt net wirklich. |
JetX-Award |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2005, 23:18 Titel: |
|
|
hehe,...genau
ich habe ganz gerne die Blast!Lib für double-buffering verwendet...
der synatx ist leicht gewöhnungsbedürftig, aber auch gut verständlich. diese "lib" is keine qlb, sondern qb-code (ASM).... is sehr gut! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Dj_Damy
Anmeldungsdatum: 18.10.2004 Beiträge: 30 Wohnort: Mainz
|
Verfasst am: 11.11.2005, 23:24 Titel: |
|
|
Zitat: |
Dj_Damy hat Folgendes geschrieben:
Der Stahlrücklauf mit WAIT &H3DA,8,8 funzt net wirklich.
JetX-Award
|
Ist daran irgendwas falsch?
MFG
DJ _________________ http://djdamy.speed-codings.de |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 11.11.2005, 23:29 Titel: |
|
|
Du kannst das ganz einfach schneller machen, in dem du auf Freebasic umsteigst. Da laufen meine alten grafikspiele viel zu schnell. Den code kannst du so (fast) beibehalten. Ich bin auch vor ner Zeit auf Freebasic umgestiegen, und das ist wirklich eine gute entscheidung gewesen. Aber ich denke mal eher, dass du bei QB bleibst, da du ja schon geschrieben hast, dass du keine anderen Libs verwenden möchtest. Auf ne andere Sprache umzusteigen ist ja sowas ähnliches.
Michael
P.S.: Link zur deutschen FB Seite _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 11.11.2005, 23:32 Titel: |
|
|
Dj_Damy hat Folgendes geschrieben: | Zitat: |
Dj_Damy hat Folgendes geschrieben:
Der Stahlrücklauf mit WAIT &H3DA,8,8 funzt net wirklich.
JetX-Award
|
Ist daran irgendwas falsch?
MFG
DJ |
das heisst STRAHLlrücklauf nicht STAHLrücklauf |
|
Nach oben |
|
 |
Dj_Damy
Anmeldungsdatum: 18.10.2004 Beiträge: 30 Wohnort: Mainz
|
Verfasst am: 11.11.2005, 23:37 Titel: |
|
|
Liegst schon richtig, ich will das in QuickBasic 4.5 coden.
Gibts nich irgendwas, was ich in dem Code verändern kann,
sodass es schneller läuft? PSET hab ich ja schon durch POKE
ersetzt, was kann man noch machen?
MFG
Dj
EDIT: @OdinX: Achso k sry _________________ http://djdamy.speed-codings.de |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.11.2005, 23:55 Titel: |
|
|
wie schon gesagr: wenn es keine eigenproduktion sein muss, würde ich die blast!lib verwenden....ist echt praktisch, weil sie nen sehr kleinen source hat und somit in jedes qb-projekt noch reinpasst! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Dj_Damy
Anmeldungsdatum: 18.10.2004 Beiträge: 30 Wohnort: Mainz
|
|
Nach oben |
|
 |
|
|
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.
|
|