Tutoriumsfrage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

jörg111

Betreff: Tutoriumsfrage

BeitragSo, Mai 16, 2004 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 16, 2004 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Wink )

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

BeitragSo, Mai 16, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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örg111

Betreff: bewegung gelungen

BeitragSo, Mai 16, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 16, 2004 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 16, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Üblicherweise wird das so geregelt:Code: [AUSKLAPPEN]
Graphics width,height,depth,modus
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
Diese Art ist wohl die gängigste Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

jörg111

Betreff: danke

BeitragSo, Mai 16, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 16, 2004 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
"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.

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Mai 16, 2004 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile .

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. Wink ]
<Wing Avenger Download> ◊◊◊ <Macrophage Download>
 

jörg111

Betreff: drawimage drawblock

BeitragSo, Mai 16, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 16, 2004 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
DrawImage lässt (Standardmäßig) die schwarzen Bereiche weg, sodass sie nicht überzeichnet werden wie bei DrawBlock. Lies am Besten den Tutorial weiter Wink

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Mai 16, 2004 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
achso, so war das gemeint, jetzt check ich's Wink !
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. Crying or Very sad
<Wing Avenger Download> ◊◊◊ <Macrophage Download>
 

jörg111

Betreff: TFT-Monitor

BeitragSo, Mai 16, 2004 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 16, 2004 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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örg111

Betreff: flimmern

BeitragSo, Mai 16, 2004 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 1:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 7:08
Antworten mit Zitat
Benutzer-Profile anzeigen
deswegen malt man einfachheitshalber einfach alles neu Wink


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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group