Interface immer da auch nach cls?
Übersicht

MiaBetreff: Interface immer da auch nach cls? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich hab jetzt schon duzent von sachen ausprobier und ich bekomms nit hin >.<
ich hab nen bild oben stehen z.b. Name: <<-- auf nem bmp bild das immer angezeigt werden soll aber sobald ich cls mache is das weg -.- ich hab versucht mit ner schleife das ding zu halten ging nur ging nix anderes mehr <.< ich hab versucht das ding global zusetzten geht auch nit ich hab versucht SetBuffer BackBuffer() flip SetBuffer FrontBuffer() geht auch nit >.< ich habs forum durchsucht und den scheiß kurs 5 ma gelesen ich kappiers nit -.- da mein altes script ja zitat von bladerunner: unschönem Code zitat ende war hab ich mir den kurs noch ma reingezogen und neu angefangen aber mein ergebnis soll das selbe sein hier ma das neue ich verliere dauernt das interface.bmp und den text name$ und den text spielergold kann das nit eina ma erklären wie ich die saven kann das die nach einem cls nit verschwinden? Zitat: Graphics 800,600,16,2
;buffer1? SetBuffer BackBuffer() ;namens eingabe Locate 270,250 name$ = Input("Gib deinen Namen ein: ") Cls ;leiste oben mit name und gold laden und anzeigen interface = LoadImage("interface.bmp") DrawImage interface,0,0 ;schrift- art,größe,fett,kusive,unterstrichen, Schrift=LoadFont("Arial.ttf",18,0,0,1) SetFont Schrift ;Name der voherangegeben wurde anzeigen Text 79,12,name$ ;gold für den spieler (anfangskapital) Schrift=LoadFont("Arial.ttf",18,0,0,0) SetFont Schrift spielergold = "500" Text 600,12, spielergold ;interface ende! ;kaufen menü Flip SetBuffer FrontBuffer() kaufenbutton = LoadImage("kaufenbutton.bmp") DrawImage kaufenbutton,290,250 ;verlassen menü verlassenbutton = LoadImage("verlassen.bmp") DrawImage verlassenbutton,290,300 ;menü1 fertig ;menü erklärung Text 250,100,"Drücke y zum kaufen und x zum verlassen" ;menü funtion test nicht richtige werte nach if If KeyHit(44) Then Print "du willst kaufen" If KeyHit(45) Then Print "du hast abgebrochen" WaitKey ;cls test für interface Cls WaitKey End antorten wie siehe sigi wird nit geduldet XD |
||
2 jahre RO npcs gescriptet
1 jahr RO maps selbergemacht Text 250,250, "< 1 woche (Blitz) Basic geschrieben" |
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also erstmal: So kanns nicht gehen.
Du hast erstens nicht verstanden, was Setbuffer macht und auch nicht wofür Cls und Flip da sind. Außerdem wird niemand so schnell sein eine Taste zu drücken und eine Entscheidung zu treffen, weil dann der Code schon bei WaitKey ist. Edit: Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() ;schrift- art,größe,fett,kusive,unterstrichen, Schrift=LoadFont("Arial",18,0,0,1);Soll das Wirklich unterstrichen werden? ;Variablen am Anfang des Programmes deklarieren interface = LoadImage("interface.bmp") kaufenbutton = LoadImage("kaufenbutton.bmp") verlassenbutton = LoadImage("verlassen.bmp") spielergold = 500 ;Das soll doch ne Zahl sein oder? Locate 270,250 name$ = Input("Gib deinen Namen ein: ") Cls ;Bildschrim leeren! ;Das ganze Menü malen ;DrawImage interface,0,0 Text 79,12,name$ SetFont Schrift;Schrift setzen Text 600,12, spielergold ;DrawImage kaufenbutton,290,250 ;DrawImage verlassenbutton,290,300 Text 250,100,"Drücke y zum kaufen und x zum verlassen";Dann gibt es hier Probleme mit dem Unterstreichen Flip ;Und wenn ALLES fertig ist, anzeigen Locate 0,0 ;Damit Print wieder oben links anfängtv Repeat ;Eine Schleife machen If KeyHit(44) Then ;Wenn y gedrückt wurde, Schreiben und die Schleife verlassen Cls Print "Du willst kaufen" Exit EndIf If KeyHit(45) Then ;Wenn x gedrückt wurde, Schreiben und die Schleife verlassen Cls Print "Du hast abgebrochen" Exit EndIf Forever Flip FlushKeys();Damit werden alle gedrückten Tasten gelöscht und WaitKey wartet auf ne neue Taste WaitKey ;Nochmal warten End Wenn du Rob's BB Kurs wirklich 5 mal durchgemacht hast, dann ist dir natürlich klar, was der Code macht und es braucht eigentlich keiner weiteren Erklärung. |
||
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte: Dexterity Ball (100%) Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz (ehemals Uboot) PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA |
Mia |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: ";Dann gibt es hier Probleme mit dem Unterstreichen
-.- deshalb hab ich ja Zitat: ;schrift- art,größe,fett,kusive,unterstrichen,
Schrift=LoadFont("Arial.ttf",18,0,0,1) SetFont Schrift ;Name der voherangegeben wurde anzeigen Text 79,12,name$ ;gold für den spieler (anfangskapital) Schrift=LoadFont("Arial.ttf",18,0,0,0) SetFont Schrift einmal mit unterstreichen des namen und das geld nicht unterstrichen Zitat: spielergold = 500 ;Das soll doch ne Zahl sein oder? meins wird auch mit zahl angezeigt -.-
Zitat: ;Variablen am Anfang des Programmes deklarieren
schön wenn du damit klar kommst ich aber nicht ich finds vor der jeweiligen prosition besser da ich damit den gesamten teil im (block) im auge hab und nit jedesmal oben gucken muss was gehört zu was Zitat: Du hast erstens nicht verstanden, wofür Cls da ist
Zitat: Cls ;Bildschrim leeren!
meinste wieso ich das ;namens eingabe Locate 270,250 name$ = Input("Gib deinen Namen ein: ") Cls gemacht hab ? aus spass? Zitat: Wenn du Rob's BB Kurs wirklich 5 mal durchgemacht hast, dann ist dir natürlich klar, was der Code macht und es braucht eigentlich keiner weiteren Erklärung.
ich lern schneller wenn ich weiß was die sachen machen z.b. print "Hi" wenn ich dann print "Hi" teste raff ich das schneller weil ich die auswirkung sehe als wenn ich mir 300 mal print "Hi" vorlese/durchlese ich hab 2 jahre lang npcs für Ragnarock gescriptet und ich kann sagen das ich durch probieren von sachen schneller gelernt habe als wie das lesen von befehlen die nur halb erklärt werden -.- PS: Zitat: Locate 0,0 ;Damit Print wieder oben links anfängtv
lern ma lesen ich wollte wissen wie ich das mache das das interface IMMA da is das OBEN ist das heißt locate 0,0 damit print im interface hängt und Name: name überschreibt geile lösung -.- und passend zum thema hast mit deiner antwort das thema total verfehlt -.- nochma ich will das pic was OBEN is + NAME$ von text und spielergold IMMER dahaben interface = hier ma meins und hier ma deins -.- wenn die ; gelsesn hättest dann wüsstes wieso ich das immer so machen in blocks -.- aber alles am anfang is besser und so husthust -.- habs jetzt so gemacht da das immer weggeht mach ich mir eben unnötige arbeit Zitat: Repeat
If KeyHit(44) Then Cls DrawImage interface,0,0 Schrift=LoadFont("Arial.ttf",18,0,0,1) SetFont Schrift Text 79,12,name$ Schrift=LoadFont("Arial.ttf",18,0,0,0) SetFont Schrift spielergold = "500" Text 600,12, spielergold Print "du willst kaufen" Exit ElseIf KeyHit(45) Then Cls End Exit EndIf Forever Zitat: Repeat ;Eine Schleife machen
If KeyHit(44) Then ;Wenn y gedrückt wurde, Schreiben und die Schleife verlassen Cls Print "Du willst kaufen" Exit EndIf If KeyHit(45) Then ;Wenn x gedrückt wurde, Schreiben und die Schleife verlassen Cls Print "Du hast abgebrochen" Exit EndIf Forever wieso 2 mal endif und 2 mal if? wieso nicht einmal if und dann elseif und einmal endif? |
||
2 jahre RO npcs gescriptet
1 jahr RO maps selbergemacht Text 250,250, "< 1 woche (Blitz) Basic geschrieben" |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: ;Dann gibt es hier Probleme mit dem Unterstreichen
Generell gild es zu vermeiden, geladene Sachen im Code nochmal zu laden. Denn, einmal geladen, immer geladen. Zumindest solange das Programm nicht beendet wird. Gemeint ist das hier. Zitat: ;schrift- art,größe,fett,kusive,unterstrichen,
Schrift=LoadFont("Arial.ttf",18,0,0,1) SetFont Schrift ;Name der voherangegeben wurde anzeigen Text 79,12,name$ ;gold für den spieler (anfangskapital) Schrift=LoadFont("Arial.ttf",18,0,0,0) SetFont Schrift Setze lieber zwei Variablen für jeweil eine Schriftart. zB Zitat: ;schrift- art,größe,fett,kusive,unterstrichen,
Schrift1=LoadFont("Arial.ttf",18,0,0,1) SetFont Schrift1 ;Name der voherangegeben wurde anzeigen Text 79,12,name$ ;gold für den spieler (anfangskapital) Schrift2=LoadFont("Arial.ttf",18,0,0,0) SetFont Schrift2 Dann kannst du im Code später immer wieder zwischen den beiden mit SetFont... wechseln. Zitat: spielergold = 500 ;Das soll doch ne Zahl sein oder?
spielergold ist hier als Variable deklariert. Da keine weiteren Angaben gemacht wurden, ist es eine Integer, also %. Denn, immer die erste Anwendung einer Variable setzt deren Zustand. variable%=123 ; Setzt variable auf den Wert 123 als Ganzzahl, also keine Kommastellen (damit kann man auch rechnen 1+1 zB). Bei Integer kann das % auch weggelassen werden. variable#=123.456 ; Setzt variable auf den Wert 123,456 Fliesskommazahl. Der Wert kann Komma haben (damit kann man auch rechnen 1.2+1.5 zB). variable$="Hallo" ; Setzt variable auf den 'Wert' "Hallo" (damit kann man 'nicht' rechnen). In Klammern gesetzt, weil man unter bestimmten vorraussetzungen doch rechnen kann. Dieses wird aber kaum benötigt. Generell kann man eine Variable deren art nicht mehr ändern. Kann also aus einer % keine # mehr machen, bevor ich das Programm nicht beende. Zitat: ;Variablen am Anfang des Programmes deklarieren
Bleibt nach wie vor Geschmackssache. Das Problem ist nur, wenn man mal an größeren Projekten arbeiten will. Dann hat man ganz schnell den Verlust des Überblicks. Daher empfield es sich, Variablen am Anfang zu deklarieren. Zu deinem Code: Normalerweise macht man es so, dass alles jedem Schleifendurchlauf neu gezeichnet wird. Natürlich kann man den Bildschirm zeichnen und dann nur entsprechende Stellen aktualisieren. Das macht die Sache leider nicht einfacher. Probiere mal folgenden Code: [AUSKLAPPEN] ;Grafikkramm
Graphics 800,600,16,2 SetBuffer BackBuffer() ;Schriftart, größe, fett, kusive, unterstrichen SchriftN=LoadFont("Arial",18,0,0,0) ;Normal SchriftU=LoadFont("Arial",18,0,0,1) ;Unterstrichen ;interface=LoadImage("interface.bmp") ;kaufenbutton=LoadImage("kaufenbutton.bmp") ;verlassenbutton=LoadImage("verlassen.bmp") spielergold = 500 ;Die 500 ist eine Ganzzahl! Locate 270,250 SetFont SchriftN name$ = Input("Gib deinen Namen ein: ") Repeat ;Das ganze Menü malen ;DrawImage interface,0,0 ;DrawImage kaufenbutton,290,250 ;DrawImage verlassenbutton,290,300 SetFont SchriftN Text 79,12,name$ SetFont SchriftU Text 600,12, spielergold Text 400,100,"Drücke y zum kaufen und x zum verlassen",1 ;Text zentrieren ; If KeyHit(44) Then Text 400,400,"Du willst kaufen" If KeyDown(44) Then Text 400,400,"Du willst kaufen",1 If KeyHit(45) Then Exit Flip Cls Forever Flip Cls SetFont SchriftN Text 400,300,"Du hast abgebrochen",1,1 Flip FlushKeys WaitKey End |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
@mia du solltest ausserdem versuchen auf Print und Input zu verzichten.
Gruß, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: und hier ma deins -.-
Aber weil du ja weißt, das ";" aus Codezeilen Komentare machen, siehst du ja, das die "DrawImage" Befehle als Kommentar sind. So konnte ich den Code testen, ohne immer einen MAV zu kriegen. (gut, ich hab vergessen die weg zu machen, aber das ist kein Grund so zu mosern!) Zitat: wieso 2 mal endif und 2 mal if? wieso nicht einmal if und dann elseif und einmal endif? Weil die meisten Neulinge meckern wenn man ElseIf reinbringt. Und es auch generell besser ist, erstmal so zu arbeiten. Optimieren kann man, wenn man in der Materie drin ist. (Außerdem hast du es ja "so ähnlich" gemacht) Zitat: Dann gibt es hier Probleme mit dem Unterstreichen
Sorry, da hab ich nicht aufgepasst ![]() Zitat: schön wenn du damit klar kommst ich aber nicht ich finds vor der jeweiligen prosition besser da ich damit den gesamten teil im (block) im auge hab und nit jedesmal oben gucken muss was gehört zu was
Das mag dich jetzt noch nicht stören. Aber wenn man so anfängt, dann kann man schnell den Fehler machen, in einer Schleife zu laden und das ist dann fatal. Außerdem solltest du dir das wie gesagt für spätere (möglicherweise größere) Projekte merken. Denn: Je mehr Grafik und je größere Dateien geladen werden, desto mehr Zeit braucht das Programm. Bei großen Spielen wird meistens auch alles vorher geladen und angezeigt, damit es im Spiel nicht zu rucklern kommt. (Ein anderer Weg ist noch das Threaded loading, welches Biltz aber nicht unterstützt) Zitat: Du hast erstens nicht verstanden, wofür Cls da ist
Wieder mein Fehler: Code: [AUSKLAPPEN] SetBuffer FrontBuffer()
Das ist die falsche Zeile... ![]() Fazit: Ich sollte morgens um halb sieben keine Hilfe geben xD das stiftet nur Verwirrung... |
||
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte: Dexterity Ball (100%) Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz (ehemals Uboot) PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: und den scheiß kurs 5 ma gelesen...
Mal ab von der Fäkalsprache: Lesen heisst nicht durcharbeiten. Lesen heisst auch nicht zwangsläufig verstehen. Wie Du ja selber so schön sagst probierst du gern aus, anstatt nur zu lesen. Bitte, gern: Code: [AUSKLAPPEN] GRAPHICS 640,480,0,1
SETBUFFER BACKBUFFER() WHILE KEYDOWN(1)=0 COLOR 0,0,0 RECT 0,0,640,480 COLOR 255,255,255 Winkel=(Winkel+2) MOD 360 Rad=(Rad+1) MOD 360 FOR i=1 TO 10 X=320+COS(Winkel+i*36)*SIN(Rad)*220 Y=240+SIN(Winkel +i*36)*SIN(Rad)*200 OVAL X-20,Y-20,40,40,1 NEXT FLIP WEND END Dieser Code ist aus der Onlinehilfe, zum Befehl ql:setbuffer Er demonstriert mehrere Dinge sehr gut: Buffering - wie es im Code angewandt wird, und wie es funktioniert. (setzen des Backbuffer als Zeichenfläche,ql:cls (hier ersetzt durch ein ql:rect), bezeichnen und dann umschalten mittels ql:flip) Der Aufbau einer Mainloop: ohne die Schleife wäre der Code rascher ausgeführt als Du ihn wahrnehmen kannst. Erst die Schleife macht das Umschalten zwischen den Buffern sinnvoll. Alles was weiter gezeichnet werden soll wird in jedem Schleifendurchlauf neu gezeichnet. Was nicht mehr erscheinen soll wird nicht mehr ausgeführt. Abhängig machst du das von dem Zustand einzelner Variablen ( was Du ja vom scripten von NPCs her kennen solltest - es müssen Bedingungen erfüllt sein um bestimmte Ereignisse eintreten zu lassen oder nicht. Das Prinzip ist das selbe.) Wenn Grafiken 'wandern' sollen verändert man in jedem Schleifendurchlauf die Variablen die ihre Koordinaten enthalten ein wenig. Wenn Du diese Prinzipien einsetzen willst musst Du dich allerdings von ql:print und ql:input verabschieden, da diese Befehle immer nur im Frontbuffer arbeiten, und Input noch dazu das Programm anhält. Diese Befehle sind Relikte und Zugeständnisse an den ursprünglichen BASIC-Dialekt. Zeitgemäß ist ql:text als print-Ersatz. Für Input gibt es im Codearchiv mehrere Ersatzmöglichkeiten, die teilweise interessanten Schnickschnack zulassen. Du kannst dir natürlich zu Übungszwecken dein eigenes INPUT schreiben, das wäre sogar eine Super-übung für die Stringbefehle. Wenn es dein Begehr ist zu üben anhand von Beispielen: Nutz die OH, die hat zu jedem Befehl ein Beispiel parat. Und lies die Tuts nicht nur, sondern arbeite sie durch. Man ist nur zuleicht versucht: "Variablen kenn ich aus der Schule, dass muss ich nur überfliegen... ach, Addition, schnickschnack, wo sind die Befehle für Bilder...". Aber damit versucht man ein Haus ohne Fundament zu bauen. Also lass dir Zeit. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group