 |
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 |
Spongebob Schwamm
Anmeldungsdatum: 31.10.2004 Beiträge: 40
|
Verfasst am: 30.01.2005, 11:43 Titel: Ruckeln und Flackern |
|
|
Hi!
Ich habe dieses Rennspiel programmiert:
CLS
SCREEN 12
ON KEY(11) GOSUB oben ‘Taste 8 auf dem Nummernblock
ON KEY(14) GOSUB unten ‘Taste 2 auf dem Nummernblock
KEY(11) ON ‘Tasten aktivieren
KEY(14) ON
x = 220
y = 300
b = 440
RANDOMIZE TIMER
a = INT(RND * 300)
DO
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 600): CIRCLE (b, a), 10, 14
b = 440
END IF
b = b - 3
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 403): CIRCLE (b, a), 10, 14
IF a 403 THEN y = 403
RETURN
Hat jemand rat wie ich das Flackern und Ruckeln beseitiegen kann?
Und kann ich ein Zähler machen der zählt wie oft man gegen die gelben Kreise kommt? |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Spongebob Schwamm
Anmeldungsdatum: 31.10.2004 Beiträge: 40
|
Verfasst am: 30.01.2005, 12:34 Titel: Naja |
|
|
Also ich verstehe noch nicht wie ich das in mein Prog einbauen soll.
könnt ihr mir das einbauen?
Mfg
Spongebob Schwamm |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 30.01.2005, 13:09 Titel: |
|
|
Stell uns sonst einmal den vollständigen Code zur Verfügung. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 30.01.2005, 17:18 Titel: Flimmerfreie Grafik |
|
|
Hallo!
Versuch mal das:
Code: |
SCREEN 7, , 0, 1
DO
REM Grafik, Berechnungen, etc...
PCOPY 0, 1: REM bringt die Grafik auf den Bildschirm
CLS: Löscht den Bildschirm (NICHT SICHTBAR!)
LOOP
|
OK?
SCREEN 7 hat mehrere Bildschirmseiten. Wenn man SCREEN 7 mit
SCREEN 7, , 0, 1
initialisiert, wird alle Grafik auf Bildschirmseite 0 geschrieben, und mit
PCOPY 0, 1
von Seite 0 auf Seite 1 kopiert.
jb |
|
Nach oben |
|
 |
Spongebob Schwamm
Anmeldungsdatum: 31.10.2004 Beiträge: 40
|
Verfasst am: 31.01.2005, 10:26 Titel: Also |
|
|
Erstmal Danke für die Antworten!
Könnt ihr mir in den Code jetzt auch eine Koliesionsabfrage einbauen.Also das wenn man gegen ein gelbes Viereck kommt das in einer Variable "punkte" die Koliesion dazugezählt wird?
Code: |
SCREEN 7, , 4, 4
CIRCLE (160, 100), 118, 15, , , 5! / 6!
PAINT (160, 100), 15
n% = 0
t0! = TIMER + 10!
DIM tRoh!(63)
ts! = 0!
FOR i% = 0 TO 63
tRoh!(i%) = TIMER - t0!
ts! = ts! + tRoh!(i%)
NEXT i%
t! = TIMER - t0!
h% = 0
AnzBild& = 0
tStop! = TIMER
WHILE INKEY$ = ""
tRohNeu! = TIMER - t0!
t! = t! + (64! * tRohNeu! - ts!) / 2080!
ts! = ts! - tRoh!(h%) + tRohNeu!
tRoh!(h%) = tRohNeu!
h% = h% + 1 AND 63
PCOPY 4, n%
SCREEN , , n%, n% - 1 AND 3
GOSUB ZeichneBild
SCREEN , , , n%
n% = n% + 1 AND 3
AnzBild& = AnzBild& + 1
WEND
tStop! = TIMER - tStop!
SCREEN 0
WIDTH 80, 25
END
ZeichneBild:
CLS
SCREEN 12
ON KEY(11) GOSUB oben 'Taste 8 auf dem Nummernblock
ON KEY(14) GOSUB unten 'Taste 2 auf dem Nummernblock
KEY(11) ON 'Tasten aktivieren
KEY(14) ON
x = 220
y = 300
b = 440
RANDOMIZE TIMER
a = INT(RND * 300)
DO
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 600): LINE (b, a)-(j, k), 14, BF
b = 440
END IF
b = b - 4
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 403): LINE (b, a)-(j, k), 14, BF
IF a <= 57 THEN a = 57
b = 440
END IF
LINE (1, 1)-(620, 57), 2, BF
LINE (1, 57)-(620, 403), 8, BF
LINE (1, 403)-(620, 460), 2, BF
LINE (1, 220)-(75, 240), 7, BF
LINE (150, 220)-(225, 240), 7, BF
LINE (300, 220)-(375, 240), 7, BF
LINE (450, 220)-(525, 240), 7, BF
LINE (600, 220)-(620, 240), 7, BF
LINE (b, a)-(j, k), 14, BF
j = b + 20
k = a + 20
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 600): LINE (b, a)-(j, k), 14, BF
b = 440
END IF
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 600): LINE (b, a)-(j, k), 14, BF
b = 440
END IF
z = x + 50
f = y + 30
LINE (x, y)-(z, f), 2, BF
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 600): LINE (b, a)-(j, k), 14, BF
b = 440
END IF
IF b = 200 THEN
RANDOMIZE TIMER
a = INT(RND * 600): LINE (b, a)-(j, k), 14, BF
b = 440
END IF
LOOP UNTIL INKEY$ = CHR$(27)
11
PRINT zerstort
SLEEP 1
END
oben:
IF z = j THEN zerstort = zerstort + 1
y = y - 4
IF y < 57 THEN y = 57
RETURN
unten:
IF x = b THEN IF y = a THEN IF z = j THEN IF f = k THEN zerstort = zerstort + 1
y = y + 4
IF y > 403 THEN y = 403
RETURN
RETURN
|
mfg
Spongebob Schwamm |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.01.2005, 16:32 Titel: Flimmerfreie Grafik |
|
|
Hallo!
Versuch mal, die Abfrage der Kollision mit POINT(x, y) zu erledigen.
Du kannst eine FOR-Schleife über alle Bildpunkte des Rennautos machen:
Code: |
FOR x = xStart TO xEnde
FOR y = yEnde to yEnde
IF POINT(x, y) = 14 THEN
REM Kollision
END IF
NEXT
NEXT
|
Erklärung:
xStart: Linke X-Position des Rennautos
xEnde: Rechte X-Position des Rennautos
yStart: Obere Y-Position des Rennautos
yEnde: Untere Y-Position des Rennautos
Du müsstest das nur noch einbauen.
jb |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 31.01.2005, 23:57 Titel: |
|
|
Aha, ich sehe bereits, Du willst wahrscheinlich eine Art "Wirbelwind" (war ein ganz altes Videokonsolenspiel aus Anfang der 80er-Jahren für den legendären Videopac von Philips) programmieren.
Habe einmal noch selber eine Variante für dieses Spiel angesetzt:
http://beilagen.dreael.ch/QB/WIRBWIND.ZIP
Besitzt eine vollkommen flimmerfreie Animation, hat jedoch noch keine Kollisionsabfrage. Dafür verwendet es ein .BMP-Sprite für die Autos (kann man mit Windows Paint ändern, wenn man Lust hat) und demonstriert noch Dinge wie Sprite abgeschnitten darstellen (geht bekanntlich nicht direkt, weil es eine Fehlermeldung ergibt), und ferner läuft das Ganze bereits in QBASIC.EXE (V1.1). _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Spongebob Schwamm
Anmeldungsdatum: 31.10.2004 Beiträge: 40
|
Verfasst am: 01.02.2005, 13:05 Titel: RE: jb |
|
|
jb könntest du mir das mal einbauen ich krieg das irgendwie nicht hin? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 01.02.2005, 16:03 Titel: Flimmerfreie Grafik |
|
|
Und vielleicht noch den Rest des Spiels verbessern ???
Irgendwas kannst du ja auch machen...
Nur ein kleiner Tip:
Versuch mal, die Variablen etwas anders zu benennen, dass auch andere Leute außer dir den Code verstehen. Das macht es uns einfacher, da was einzubauen.
EDIT:
Wenn du das nicht gewusst hast, POINT(x, y) liefert den aktuellen Farbwert eines Pixels zurück. Wenn du also mit meinem Beispiel alle Punkte des Spielers abfragst, und POINT(x, y) = 14 (gelb) ist, weißt du, dass er von eiem Auto "überfahren" worden ist.
Noch ein EDIT:
Wie ich sehe, initialisierst du zwar SCREEN 7, aber machst das im Unterprogramm ZeichneBild wieder zunichte...
Der Code hier sollte das noch mal verdeutlichen:
Code: |
SCREEN 7, , 0, 1
REM Auflösung 320 * 200
x = 340
y = INT(RND * 200)
DO
x = x - 1
IF x < 0 THEN
x = 340
y = INT((RND * 200))
END IF
REM Wenn die Box nicht mehr zu sehen ist, setze sie nach links.
LINE (x, y)-(x - 20, y + 20), 14, BF
REM Das Auto
PCOPY 0, 1
CLS
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
REM ein kleines Päuschen...
LOOP UNTIL INKEY$ = CHR$(27)
|
Try it!
jb |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 14.02.2005, 21:40 Titel: |
|
|
Hallo!
Ich benutze (Wirklich zugegeben) und habe auch noch niemals Bildschirm-"Seiten" benutzt (War mir damals schon zu umständlich )
Für den Einsteiger in QB kann ich einfach "nur" die folgenden Zeilen an Code empfehlen:
Code: | WAIT &H3DA, 8
WAIT &H3DA, 8, 8
|
Erklärung:
Im CRT (Kathodenstrahlbildschirm) ist ein Elektronenstrahl; Im Flachbildschirm wir er "nachgeahmt". (Da fällt mir gleich das "kleine" Experiment von ICC mit dem Hochspannungsteil für den Elektrodenstrahl ein ). Auf jeden Fall ist hinter der Glasscheibe von Monitor eine Schicht aus einem Material, dass aufleuchtet, wenn der Elektrodenstrahl draufkommt. Und es ist ganz einfach: Die zwei Code-Zeilen lassen den Computer einfach "warten", bis der Strahl wieder von vorne anfängt, zu "zeichnen". Wenn es schneller geht, also er nicht mehr "nachkommt", flimmert das Bild.
MfG das Spangengesicht  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 16.02.2005, 19:26 Titel: Ruckelfreie Grafik |
|
|
Ja, das kann funktionieren, aber das Problem ist auch, dass man
das Zeichnen des Gegenstandes mitbekommt, etwas flimmert es also
immer.
Außerdem ist das mit den Bildschirmseiten auch nicht SO kompliziert...
jb |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 16.02.2005, 19:33 Titel: |
|
|
Hallo!
Es gibt auch Dinge, die man noch nicht probiert hat und seine Finger davon gelassen hat. Ich werde mich mal mit dem Bildschirmseiten-"Puffer" beschäftigen. So sehr schwer kann das doch nicht sein  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 16.02.2005, 20:54 Titel: |
|
|
Sehr lobenswert
jb
(Guck mal an den Anfang dieses Themas. Da erkläre ich und dreael, wie's geht) |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 16.02.2005, 20:57 Titel: |
|
|
Hallo!
Klar - ich kenne schon Dreaels "Doktorarbeiten" über bestimmte Themen in QB; das Tutorial von ihm mit "Butterweichen Animationen" muss ich erst noch komplett anschauen  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 16.02.2005, 21:06 Titel: |
|
|
Nichts für Ungut, aber ich glaube, das dreals "Doktorarbeiten" zwar sehr sehr gut und ausführlich sind, aber vielleicht am Anfang etwas zu kompliziert sind.
Unter qbasic.de in der Download-Rubrik gibt es ein Tutorial von Mario Zechner namens "Spielegrafikprogrammierung" (so hieß das, glaube ich jedenfalls), das das erklärt.
(so hab ich das auch gelernt )
jb |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.02.2005, 21:12 Titel: |
|
|
Ich habe auch noch nie pageflipping benutz... stattdessen benutzt ich seit neuestem eone offscreen page ..also Fast das selbe..aber besser  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 16.02.2005, 21:19 Titel: |
|
|
Page Flipping ist aber was Anderes als Double Buffering.....
Aber das nur so am Rande....
Meinst du mit Offscreen-Page eine virtuelle Bildschirmseite?
Von sowas habe ich nur unter SCREEN 13 gehört, da er keine 2 Bildschirmseiten hat.
jb |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.02.2005, 21:22 Titel: |
|
|
Jop,so in der art issen.
Achja: Mein Spiel fruitz batzle benutzt die BlastLib, die Offscreen macht:
http://sagagames.de/?programm=fruitbattle
Zuletzt bearbeitet von Jojo am 06.03.2010, 16:51, insgesamt einmal bearbeitet |
|
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.
|
|