Tutoriumsfrage
Übersicht

jörg111Betreff: Tutoriumsfrage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo ich bin neu hier und habe ne Frage zum Tutorium. Dort habe ich eine Sache nicht nachvollziehen können:
Code: [AUSKLAPPEN] Global Grafik Graphics 640, 480, 16, 1 Grafik = LoadImage ("Hero.bmp") for x = 1 to 400 DrawBlock Grafik, x, 100 next Delay 2500 Gut oder? Was, nichts gesehen? Tja, das zeigt welche Leistung eigentlich in Blitz Basic steckt. Die Grafik wurde gerade von links nach rechts bewegt und dabei 400 mal gesetzt und dennoch ging es so schnell, das es gar nicht zu sehen war. Das stimmt es ist nichts zu sehen. Nur das Bild ist auf Position 400 zu sehen. Auf den anderen Positionen sieht man aber nichts. Zudem taucht das Bild aber auch erst auf Position 400 nach ein paar Sekunden auf, also der Bildschirm bleibt ein paar Sekunden schwarz. ************************************************** Code: [AUSKLAPPEN] Global Grafik Graphics 640, 480, 16, 1 SetBuffer BackBuffer () Grafik = LoadImage ("Hero.bmp") for x = 1 to 400 DrawBlock Grafik, x, 100 flip next Delay 2500 Und schau da, die Figur bewegt sich fließend wie eine Fee über den Bildschirm (Entschuldigung an alle Feen, mir ist klar das kein Mann der Welt sie so fließend wie eine Fee bewegen kann). Also hier sehe ich überhaupt keinen Unterschied zu dem Code vorher. Die Grafik taucht auch erst auf Pos. 400 auf nach ein paar Sekunden und links davor ist gar nichts zu sehen. Außerdem steht da doch, daß sich die Figur fließend bewegt, jedoch kann ich gar keine Bewegung sehen, die Figur taucht einfach nach ein paar Sekunden auf Pos. 400 auf. Wer kann mir das erklären? Ich habe lediglich ein anderes bmp-Bild genommen, weil ich in dem Tutorium das Bild Hero.bmp nicht finden konnte. Überhaupt sind die Tutoriums zwar da von Blitzbase.de aber nicht die Bilder dazu?? Wart auf Antwort Danke. |
||
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als dieses Beispiel entwickelt wurde waren die Rechner noch nicht so schnell wie heute.Dadurch muss mann immer dafür sorgen das der Code auf allen Rechnern gleich schnell läuft.(Kapitel? ![]() In der Tat gibt es Sachen wo dies nich gemacht wurde.Auch ich kann dann nicht mitreden wenn von ANIMATION die Rede ist,da mein XP2600 damit so schnell fertig ist das mann es nicht sehen kann. Bei deinem kleinen Beispiel reicht es aus wenn du vor das NEXT commando einen DELAY von meinetwegen 100 einfügts. Dies ist zwar kein schöner CODE (mann möge mich steinigen),aber du siehst wenigstens dein Beispiel ordentlich. cu Linux |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wird daran liegen, das dieses Beispiel einen anderen Bildschirmmodus benutzt. Der braucht einige Momente bevor er eingestellt ist. Bis dahin sieht man nur ein schwarzes Bild. Und weil die Bewegung so schnell geht sieht man sie nicht, weil der Bildschirmmodus noch gar nicht eingestellt ist, während die Bewegung schon abläuft.
Nimm also entweder den Fenstermodus (Graphics 800,600,16,2), oder stelle deine aktuelle Bildschirmauflösung ein (z.B. 1024x768). Alternativ könntest du nach dem Graphics-Befehl auch mit Delay 1-2 Sekunden Pause einfügen, bevor die Bewegung gestartet wird. Code: [AUSKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() For x = 1 To 640 Step 5 Cls Oval x,230,20,20 Flip Next Delay 1000 End @ Linux Im zweiten Beispiel steht doch der Flip-Befehl drin. Warum also noch mit Delay arbeiten? |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
jörg111Betreff: bewegung gelungen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi danke für die Antwort Travis,
es lag tatsächlich an der Bildschirmauflösung, jetzt sehe ich auch die Bewegung. Aber noch eine Frage: Wenn ich eine Figur bewegen will, sollte ich dann vor jedem Weitersetzen von x den Bildschirm löschen, damit die Figur gelöscht wird? Oder ist es besser einen schwarzen Rahmen um die Figur zu machen (natürlich nur wenn man einen schwarzen Hintergrund hat) damit dieser Rahmen die vorherige Figur beim nächsten Schritt wieder löscht. Bei DrawBlock wird die vorherige Figur gelöscht, bei DrawImage wird die Figur an der vorherigen Position NICHT gelöscht, man bekommt einen Streifen links (weil die Figur sich von links nach rechts bewegt) hinter sich hergezogen Kann mir das nochmal jemand erklären Danke im voraus. Tschau |
||
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na da lag ich ja daneben,gut das es Travis gibt.
Zweiter Versuch: Es wird immer der ganze Bildschirm gelöscht und neugezeichnet.Ansonsten kriegst du nur Probleme wenn Hintergrundgrafiken usw dazu kommen. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Üblicherweise wird das so geregelt:Code: [AUSKLAPPEN] Graphics width,height,depth,modus
Diese Art ist wohl die gängigste SetBuffer BackBuffer() ;Grafiken laden Repeat ; Hauptschleife Cls ; Bildschirm löschen ; Zeugs malen und berechnen Flip ; Buffer tauschen Until KeyHit(1) ; Wiederholen bis Esc gedrückt ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
jörg111Betreff: danke |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die zahlreichen Antworten
Wenn ich das richtig verstanden habe, ist also die gängige Art für Bewegung, den Bildschirm vor jeder Bewegung zu löschen?! Und die Art mit dem Kasten vor der Figur, der die Figur wieder löscht ist nicht zu empfehlen oder??? Aber wie verhält es sich mit DrawImage und DrawBlock? In der Onlinehilfe steht doch, daß mit DrawImage bewegliche Objekte gezeichnet werden und mit DrawBlock Hintergrundbilder Aber wie gesagt, wird das Bild mit DrawImage nicht gelöscht aber mit DrawBlock schon?? Hängt wohl irgendwie mit der Transparenzfarbe zusammen, aber verstanden hab ich das nicht so ganz. Wer weiß warum? Und gibt es bei CLS nicht Probleme, daß vielleicht Dinge auf dem Bildschirm gelöscht werden, die bleiben sollen und nicht jedesmal wieder neugezeichnet werden? Und was meint Travis damit: Was hat Delay mit dem Flip-Befehl zu tun? Er meinte doch wozu Delay wenn der Flip-Befehl benutzt wird |
||
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
"CLS" (siehe Hubsi) löscht den GANZEN Bildschirm,also alles.
Mit dem Delay wollte ich erreichen das der Rechner eine Pause einlegt bevor er neuzeichnet um das ganze nachvollziehen zu können. Aber Travis hat Recht ,da es nur an der Bildschirmauflösung lag war mein Vorschlag nonsens.Vergiss es.Wenn der Flip Befehl gesetzt ist kann der Rechner nicht schneller anzeigen als den normalen Zeichenrytmus.Ein DELAY ist also unnötig.Die beiden Befehle haben nix miteinander zu tun. Wenn du nicht immer den ganzen Bildschirm löschst sind Animationen oder scrollings fast unmöglich.Du hast da einen Denkfehler,es wird nix gelöscht sondern nur neu gezeichnet,davor wird halt mir CLS gelehrt. |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit Cls gib es eigentlich keine probleme. Bilder, die im Nächsten "Durchgang" immernoch dasein sollen muss man immer wieder zeichnen, Da für kein Weg dran Vorbei... Jedenfalls kein rentabler ![]() Aber ich meine sowohl Drawblock-images alsauch DrawImage-images lassen sich mit Cls löschen. Der einzige unterschied zwischen den beiden Befehlen ist glaube ich nur, dass man bei Drawimage einen Tranzparente Hintergrundfarbe einstellen kann. ([ch benutz sowieso nur Drawimage, wenn das Bild nirgends Transparent sein soll, nehm ich halt Maskimage (bild,1,1,1) oder irgend ne andere Farbe, die nicht im Bild vorkommt. ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
jörg111Betreff: drawimage drawblock |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Das sich DrawImage und DrawBlock löschen läßt mit CLS ist mir schon klar. Den Befehl DrawImage bzw. DrawBlock hatte ich in diesem Fall NICHT mit CLS zusammen gemacht. Wenn ich diese Befehle ohne CLs benutze, wird das Bild mit DrawImage nicht gelöscht und mit DrawBlock wird es gelöscht Wie kommt das? |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
DrawImage lässt (Standardmäßig) die schwarzen Bereiche weg, sodass sie nicht überzeichnet werden wie bei DrawBlock. Lies am Besten den Tutorial weiter ![]() |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso, so war das gemeint, jetzt check ich's ![]() Also das liegt wirklich am Transparenten Hintergrund aber wie Linux schon gesagt hat, wird das eben nicht gelöscht, sondern nur übermalt. Ich fürte, meine Antworten haben dich nicht wirklich weiter gebracht. ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
jörg111Betreff: TFT-Monitor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann es sein, daß die Bewegung etwas flimmert bzw. ein wenig ruckelt mit folgendem Code.
Oder kann es an meinem TFT-Monitor liegen Übrigens: 1280x960 ist die Auflösung die ich in Windows eingeschaltet habe, damit Blitzbasic sich nicht umschalten muß Code: [AUSKLAPPEN] Global Grafik Graphics 1280, 960, 32, 1 SetBuffer BackBuffer () Grafik = LoadImage ("Roboter.bmp") For x = 1 To 400 Cls DrawImage Grafik,x,100 Flip Next Delay 2500 |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würd das so machen:
Code: [AUSKLAPPEN] Graphics 1280, 960, 32, 1 Setbuffer Backbuffer() Grafik = Loadimage("Roboter.bmp") repeat cls Drawimage Grafik x,200 x = x+1 flip until keyhit(1) |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
jörg111Betreff: flimmern |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schön und gut
aber was ändert das am flimmern. Oder kanns an der grafik liegen, wenn einige Striche zu dünn gezeichnet sind irgendwie hab ich mir die Bewegung flüssiger vorgestellt. Ich werd das Gefühl nicht los, daß es doch am TFT-Flachbildschirm liegt. vielleicht muß man da noch was beachten bei der Programmierung. Ich habs mal mit ner anderen Grafik ausprobiert. ist aber das gleiche ruckelt auch etwas irgendwie nicht flüssig genug wer kann mir helfen? |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
TFT Bildschirme sind eben träger.
Mach mal deine Tests mit 16 bit, ist vielleicht etwas flotter. Und wenn du die Auflösung nicht umschalten magst, nimm den windowed Mode, dann hast du am Anfang auch flüssiger arbeiten. soli |
||
solitaire |
storzi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
deswegen malt man einfachheitshalber einfach alles neu ![]() Code: [AUSKLAPPEN] graphics 800,600,32
setbuffer backbuffer() hintergrund=loadimage("hintergrund.bmp") bild=loadimage("bild.bmp") repeat if keyhit(1) then end drawblock hintergrund drawimage bild,x,250 flip x=x+xanders if x=0 then xanders=1 if x=800 then xanders=-1 forever das "bild" ist das ding was sich bewegen soll, also nimm da ein bild was außenrum schwarz ist. das hintergrundbild sollte 800x600 groß sein (oder halt so groß wie die entsprechende auflösung) |
||
http://www.splattergamez.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group