Verständnisproblem: Cls und Cursor-anzeige

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

extra

Betreff: Verständnisproblem: Cls und Cursor-anzeige

BeitragFr, Jun 29, 2007 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten tag....

nach einer halben stunde forensuche ist genug.

folgender code (RPG-Tutorial, Robsite):
(ist nicht vollständig!)

Code: [AUSKLAPPEN]
Dim map(31,23)
;den Grafikmodus laden, wie vorher erwähnt 1024*768*16
Graphics 1024,768,16,1
;Läd das tileset, dessen tiles 32*32 pixel groß sind
;das erste tile hat den wert 0 und es sind insgesamt 6 dieser
;mini bilder
Tileset = LoadAnimImage("tileset.bmp",32,32,0,6)
;ein mauszeiger, den ich mit Hypersnap aus einer curser-datei
;in das bitmap-format umgewandelt habe.
Maus = LoadImage("maus.bmp")
;hier werden alle variablen globalisier, die auch in den
;functionen verwendet werden.
Global x,y,mx,my,mapx,mapy,tile = 1

;Startet die Hauptschleife
Repeat
;Aktiviert den Backbuffer
SetBuffer BackBuffer()
;ESC-Taste zum beenden des programs
If KeyDown(1) Then End
;die array wird eingelesen und die map wird gemalt
For x = 0 To 31
For y = 0 To 23
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next
;Die Tasten von 1 - 6 ich erklehre mal kurz die
;functione:

;Das zu malende tile hat die framezahl :

;1-Taste = 1

;2-Taste = 2

;3-Taste = 3

;4-Taste = 4

;5-Taste = 5

;6-Taste = 0

If KeyDown(2) Then tile = 1
If KeyDown(3) Then tile = 2
If KeyDown(4) Then tile = 3
If KeyDown(5) Then tile = 4
If KeyDown(6) Then tile = 5
If KeyDown(7) Then tile = 0

;die veriablen mx und my werden den koordinaten der maus
;zugewiesen.
mx = MouseX()
my = MouseY()
;wenn man die Linke maustaste drückt....
If MouseDown(1) Then
;wird die function scroll aufgerufen....
scroll()
;und dei aktuelelle positon des mauszeigers,
;die in der function scroll berechnet wird...
;also das tile wird einfach auf klick
;gesetzt, wobei das frame des tilesets
;die veriable tile angibt.
map(mapx,mapy) = tile
End If

;die selbe prozedur, nur dass diesmal die
;rechte maustaste gedrückt wird, und das
;tile nur in das frame mit dem wert 0 umgeändert wird.
If MouseDown(2) Then
scroll()
map(mapx,mapy) = 0
End If


;S-Taste
;Die function zum speichern der map und der variabele tile
If KeyHit(31) Then save()
;L-Taste
;Funktion zum laden der map und der veriable tile
If KeyHit(38) Then load()
;malt den mauszeiger an den koordinaten mx und my, die
;vorher bereits den maus-ko. zugeteilt wurden
DrawImage maus,mx,my
;flippen und wieder zum anfang der schleife
Flip
Forever


Ich versteh nicht wie der mauszeiger hier ohne cls angezeigt wird.
Wenn ich ohne cls nen mauszeiger habe, dann zeichnet der sich immer neu ohne die alte position zu löschen.
 

Dreamora

BeitragFr, Jun 29, 2007 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
du brauchst kein CLS wenn du den gesamten Bildschirm überzeichnest wie hier mit den Tiles.

CLS würde nur benötigt wenn der Bildschirm irgendwo leer wäre bzw. nix gezeichnet, denn CLS macht nichts anderes als genau das eigentlich zu übernehmen (indem es den Bildbereich den du siehst mit einer Farbe auffüllt)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

skey-z

BeitragFr, Jun 29, 2007 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne jetzt den ganzen Code angesehen zu haben:

CLS = Clear Screen, bedeutet, dass alles was vorher auf dem aktuellen Buffer gezeichnet wurde gelöscht wird.

FLIP = Flip Bufers, ist Doublebuffering eingerichtet, wird erst alles auf dem hinteren Buffer geszeichnet und bei Aufruf dieses Befehls, werden beide Buffer getauscht und das Bild was vorher im hinteren Buffer wird nun auf dem Bildshirm angezeigt.

Hoffe es konnte dir bei deinem Problem weiterhelfen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

extra

BeitragFr, Jun 29, 2007 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
vieln dank für die schnellen antworten...hab mir schon gedacht das es mit den Tiles zutun hat

Aber, wie löse ich dann folgendes:

Ich hab z.B 2 Bilder. Ein bild wird durch Tastendruck auf einer bestimmten Position gezeichnet, das 2 wird bei tastendruck auf die selbe position gezeichnet.(also das bekomm ich noch hin)
Aber wie stell ich das nun an, damit der mauszeiger angezeigt wird.

Wenn das bild also nicht mit tiles voll ist, brauch ich cls.
Wenn ich aber cls verwende, werden die bilder nicht angezeigt.

falls jmd. meine ausführungen nicht versteht, kann ich gern mal ein bsp-code posten.
 

Dreamora

BeitragFr, Jun 29, 2007 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
die bilder werden immer angezeigt. Du musst sie nur jedes mal nach CLS und vor FLIP zeichnen. wenn du das nicht machst sind sie weg.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

extra

BeitragFr, Jun 29, 2007 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
also bei mir werden die bilder nicht angezeigt wenn ich in der schleife einbaue, das z.b bei keyhit ein bild kommen soll...es blinkt nur kurz auf


aber egal hab das problem jetz anders gelöst:
bei einem tastendruck ruf ich eine funktion auf, in der funktion mach ich eine schleife, lade cursor und bilder noch mal....schleife endet wenn ich die andere taste drücke und man kommt wieder in die hauptschleife und dann kommt das andere bild....zwar umständlich ..aber gelöst
 

Dreamora

BeitragFr, Jun 29, 2007 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
www.robsite.de

Dort die Anfänger Tutorials

Dir fehlen, gemäss deiner Beschreibung, sehr viele sehr elementare Grundwissensbausteine um überhaupt ein Spiel schreiben zu können fürchte ich.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

extra

BeitragFr, Jun 29, 2007 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Aussagen meiner Beschreibung lassen dich zu der Annahme kommen das ich ein Spiel schreiben will?

Hab alles nochmal durchgelesen und finde nichts das dich zu solchen vermutungen berechtigt hätte.

Tankbuster

BeitragFr, Jun 29, 2007 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt daran, das Keyhit nur in dem Schleifendurchlauf 1 ist, in dem du die Taste drückst.
Und wenn du etwas wie
Code: [AUSKLAPPEN]
If KeyHit(28) Then DrawImage bild,0,0,0

geschrieben hast, ist das dadurch auch ziemlich logisch Wink

erstelle am besten eine Variable, der du dann einen Wert zuweist. Dann fragst du diesen Wert ab, und malst dann erst das Bild. Vielleicht hab ich mich ein bisschen undeutlich ausgedrückt, aber ich hab ja noch einen Beispielcode auf lager

Code: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

Bild=LoadImage("bild.bmp")
malen=0
While Not KeyDown(1)


If KeyHit(28);Enter-Taste

If malen=1 Then
malen=0
ElseIf malen=0 Then
malen=1
EndIf

EndIf


Cls

If malen=1 Then DrawImage Bild,0,0,0

Flip
Wend
Twitter
Download Jewel Snake!
Windows|Android
 

Dreamora

BeitragFr, Jun 29, 2007 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
extra hat Folgendes geschrieben:

bei einem tastendruck ruf ich eine funktion auf, in der funktion mach ich eine schleife, lade cursor und bilder noch mal....schleife endet wenn ich die andere taste drücke und man kommt wieder in die hauptschleife und dann kommt das andere bild....zwar umständlich ..aber gelöst


Nun sagen wir es anders: Die aussage zeigt auf jeden Fall recht deutlich das dir grundlegendes Wissen im Bereich der grafischen Programmierung mit einem Canvas fehlt.

Weil sonst hättest du einfach eine Zustandsvariable dir dir sagt welches Bild zu zeichnen ist und die von den Tasten abhängt und dann entsprechend einfach das zugehörige Bild zeichnen Smile

Wie gesagt, am besten die grundlegenden Tutorials auf Robsite ma machen. Selbst wenn du kein Spiel machen willst, lernst du dabei viele der grundlegenden Dinge für die Programmierung einer Multimediaanwendung.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

extra

BeitragFr, Jun 29, 2007 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
oh...stimmt...mit ner zustand variable gehts nun auch...ohne den umweg mit der schleife...danke

danke auch für den code tankbuster.

werd mir noch ein paar rob-tutorials reinziehen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group