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:

Ruckeln und Flackern
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Spongebob Schwamm



Anmeldungsdatum: 31.10.2004
Beiträge: 40

BeitragVerfasst am: 30.01.2005, 11:43    Titel: Ruckeln und Flackern Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 30.01.2005, 11:56    Titel: Antworten mit Zitat

Zum Flackern: Ich denke, da sind die unter

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/ButterweicheAnimationen.html

diskutierten Grundlagen das, was Du brauchst. Tipp: Ich würde statt SCREEN 12 mit SCREEN 7 arbeiten, wo Dir ausreichen Videoseiten und PCOPY zur Verfügung stehen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 30.01.2005, 12:09    Titel: Antworten mit Zitat

Hallo.

Oder vielleicht Screen 9? Der hat auch 2 Seiten, 16 Farben und eine relativ hohe Auflösung von 640x350. Screen 7 ist nur so klein wie Screen 13. :/

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Spongebob Schwamm



Anmeldungsdatum: 31.10.2004
Beiträge: 40

BeitragVerfasst am: 30.01.2005, 12:34    Titel: Naja Antworten mit Zitat

Also ich verstehe noch nicht wie ich das in mein Prog einbauen soll.
könnt ihr mir das einbauen?

Mfg
Spongebob Schwamm
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 30.01.2005, 13:09    Titel: Antworten mit Zitat

Stell uns sonst einmal den vollständigen Code zur Verfügung.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 30.01.2005, 17:18    Titel: Flimmerfreie Grafik Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Spongebob Schwamm



Anmeldungsdatum: 31.10.2004
Beiträge: 40

BeitragVerfasst am: 31.01.2005, 10:26    Titel: Also Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 31.01.2005, 16:32    Titel: Flimmerfreie Grafik Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 31.01.2005, 23:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Spongebob Schwamm



Anmeldungsdatum: 31.10.2004
Beiträge: 40

BeitragVerfasst am: 01.02.2005, 13:05    Titel: RE: jb Antworten mit Zitat

jb könntest du mir das mal einbauen ich krieg das irgendwie nicht hin?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 01.02.2005, 16:03    Titel: Flimmerfreie Grafik Antworten mit Zitat

Und vielleicht noch den Rest des Spiels verbessern verwundert verwundert ???

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 14.02.2005, 21:40    Titel: Antworten mit Zitat

Hallo!

Ich benutze (Wirklich zugegeben) und habe auch noch niemals Bildschirm-"Seiten" benutzt (War mir damals schon zu umständlich traurig )
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 zwinkern ). 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 happy
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.02.2005, 19:26    Titel: Ruckelfreie Grafik Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 16.02.2005, 19:33    Titel: Antworten mit Zitat

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 grinsen
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.02.2005, 20:54    Titel: Antworten mit Zitat

Sehr lobenswert zwinkern zwinkern zwinkern

jb

(Guck mal an den Anfang dieses Themas. Da erkläre ich und dreael, wie's geht)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 16.02.2005, 20:57    Titel: Antworten mit Zitat

Hallo!

Klar - ich kenne schon Dreaels "Doktorarbeiten" zwinkern über bestimmte Themen in QB; das Tutorial von ihm mit "Butterweichen Animationen" muss ich erst noch komplett anschauen grinsen
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.02.2005, 21:06    Titel: Antworten mit Zitat

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 zwinkern zwinkern )

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 16.02.2005, 21:12    Titel: Antworten mit Zitat

Ich habe auch noch nie pageflipping benutz... mit den Augen rollen stattdessen benutzt ich seit neuestem eone offscreen page ..also Fast das selbe..aber besser grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.02.2005, 21:19    Titel: Antworten mit Zitat

Page Flipping ist aber was Anderes als Double Buffering.....

Aber das nur so am Rande.... zwinkern zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 16.02.2005, 21:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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