Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 20.06.2008, 16:11 Titel: ein bmp bild vor einem anderen anzeigen |
|
|
Ich habe ein großes bild, die map und ein kleines bild, die spielfigur.
wenn ich beide bilder mit dem put befehl einfüge sieht man immer nur das große bild. wie mache ich dass man die spielfigur im vordergrund sieht?
kann ich die ecken von der spielfigur transparent machen so dass man keine eckige spielfigur hat? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.06.2008, 16:19 Titel: |
|
|
Schau dir bitte die Funktionsweise des PUT-Befehls an. Als Mixmodus gibt es da unteranderem den modus "Trans", der eine bestimmte Farbe (0 im indizierten Modus bzw RGB(255,0,255) im Truecolor-Modus) durchsichtig erscheinen lässt. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 20.06.2008, 16:23 Titel: |
|
|
mix modus?
wenn ich trans nicht benutzten würde dann kann man garnichts mehr erkennen, weil sich die farben die übereinander liegen mischen, dass will ich ja eben nicht, ich will dass die spielfigur auf der map ist und nicht darunter oder mit ihr gemischt. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 20.06.2008, 16:26 Titel: |
|
|
wenn ich trans weglasse flackert das bild auch. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.06.2008, 16:30 Titel: |
|
|
Mix-Modus ist ein Flag, welches angibt, wie das Sprite und das darunterliegende bild kombiniert werden sollen. Im Normalfall benutzt man da ALPHA, TRANS oder PSET. Die anderen Modi mischen die Farben. Wie man Flackern unterbindet, wurde auch schon oft genug gefragt. Bitte suche in der Referenz nach den Schlüsselwörtern SCREENLOCK / SCREENUNLOCK sowie SCREENSYNC. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 20.06.2008, 22:58 Titel: |
|
|
Das flackern liegt in diesem fall aber daran, dass er PUT im XOR modus (=standard) benutzt. Somit wird das kleine bild einmal angezeigt, im nächsten zeichenschritt jedoch wieder gelöscht, wodurch das Flackern entsteht. Da hilft es auch nicht, wenn man screenlock, etc. verwendet. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 12:26 Titel: |
|
|
Gibt es eine andere Möglichkeit das flackern zu unterbinden? |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 12:32 Titel: |
|
|
frebas hat Folgendes geschrieben: | Gibt es eine andere Möglichkeit das flackern zu unterbinden? |
Ich habe jetzt einfach "sleep 1" in die loop schleife eingefügt und es klappt
Nebenbei: in der deutschen Referenz steht, dass der Farbwert für das transparentmachende Pink/Violett HFF00FF sei, ich würde #FF00FF oder FF00FF schreiben da es für verwirrung sorgt wenn man sich nicht mit den html faben auskennt. |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 23.06.2008, 12:34 Titel: |
|
|
Eigentlich solltest du es so machen, wie Jojo es beschrieben hat:
Code: | DO
SCREENLOCK
CLS
' Hier der Zeichenkram
SCREENUNLOCK
SCREENSYNC
LOOP UNTIL Abbruchbedingung |
[quote="frebas"] frebas hat Folgendes geschrieben: | Nebenbei: in der deutschen Referenz steht, dass der Farbwert für das transparentmachende Pink/Violett HFF00FF sei, ich würde #FF00FF oder FF00FF schreiben da es für verwirrung sorgt wenn man sich nicht mit den html faben auskennt. |
Das H davor ist einfach nur ein Indiz dafür, dass es sich um eine Hexadezimale Zahl handelt. Ist schon korrekt so. Bei #FF00FF bzw. FF00FF ist das eher ungenau.  _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Zuletzt bearbeitet von Stormy am 23.06.2008, 12:36, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.06.2008, 12:35 Titel: |
|
|
Soll dann auch in einem Englischen Wörterbuch "Guten Tag" statt "Good Day" stehen, weil man das ja aus dem Deutschen kennt? Hexadezimale Variablen werden in FreeBASIC mit &H... begonnen und nicht mit #. In C würden sie z.B. mit 0x... beginnen. Du weißt gar nicht, wie viele Leute mit HTML gar nix anfangen können...
Zitat: | Gibt es eine andere Möglichkeit das flackern zu unterbinden? |
Das ist ja schon wieder richtgies Trollverhalten... Wir haben dir zwei Lösungen angeboten (da der Standard-Überschreibmodus von PUT eben die das Hintergrundbild und das gePUTtete Bild eben mischt) und du bist noch nicht mal drauf eingegangen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 12:49 Titel: |
|
|
Stormy hat Folgendes geschrieben: | Eigentlich solltest du es so machen, wie Jojo es beschrieben hat:
Code: | DO
SCREENLOCK
CLS
' Hier der Zeichenkram
SCREENUNLOCK
SCREENSYNC
LOOP UNTIL Abbruchbedingung |
|
Jetzt versteh ich das(danke für die Hilfe!), aber zwei Probleme wären da noch
1.Ich habe immer mit timer die zeit am anfang des Frames gemessen und am ende des frames. die werte werden immer subtrahiert um die zeit für einen frame zu bekommen, das ist leider ziemlich rechenaufwändig und geht nicht mehr wenn der pc ein paar minuten an wahr weil die werte einfach zu groß werden (INF). und dann klappt eigendlich das programm nicht mehr.
2. in meinem programm bewegt sich eine spielfigur gesteuert mit den pfeiltasten aber die geschwindigkeit der bewegung hängt leider davon ab wie hoch die wiederhohl rate eingestellt ist. kann man das irgendwie ändern?
Danke schonmal im Vorraus! |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 12:55 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Soll dann auch in einem Englischen Wörterbuch "Guten Tag" statt "Good Day" stehen, weil man das ja aus dem Deutschen kennt? Hexadezimale Variablen werden in FreeBASIC mit &H... begonnen und nicht mit #. In C würden sie z.B. mit 0x... beginnen. Du weißt gar nicht, wie viele Leute mit HTML gar nix anfangen können...
|
Ich finde deine Übertragung auf das englische wörtebuch etwas sinnlos.
Ich kann wie viele leute mit html nicht viel anfangen und deshalb hab ich als erstes versucht in GIMP &HFF00FF als html farbe einzufügen aber es ging nicht, ich kann mir gut vorstellen dass das auch anderen leuten passiert. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.06.2008, 12:56 Titel: |
|
|
Meine Analogie macht mehr sinn als dein GIMP-Krams. Wenn man BASIC lernt, dann lernt man BASIC und nicht HTML. Und in BASIC werden Hex-Zahlen nunmal mit &H... gekennzeichnet! Dagegen kannst du nichts machen und sobald du #FF00FF in deinen Code einfügen willst, gibt's nen Fehler! Würdest du nun die Farbcodes aus der Referenz kopieren und dort würde kein &HFF00FF stehen, hättest du wohl KEINE ahnung, was daran jetzt falsch ist! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 13:03 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Meine Analogie macht mehr sinn als dein GIMP-Krams. Wenn man BASIC lernt, dann lernt man BASIC und nicht HTML. Und in BASIC werden Hex-Zahlen nunmal mit &H... gekennzeichnet! Dagegen kannst du nichts machen und sobald du #FF00FF in deinen Code einfügen willst, gibt's nen Fehler! Würdest du nun die Farbcodes aus der Referenz kopieren und dort würde kein &HFF00FF stehen, hättest du wohl KEINE ahnung, was daran jetzt falsch ist! |
Jeder dem seine Meinung. |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 23.06.2008, 13:05 Titel: |
|
|
frebas hat Folgendes geschrieben: |
1.Ich habe immer mit timer die zeit am anfang des Frames gemessen und am ende des frames. die werte werden immer subtrahiert um die zeit für einen frame zu bekommen, das ist leider ziemlich rechenaufwändig und geht nicht mehr wenn der pc ein paar minuten an wahr weil die werte einfach zu groß werden (INF). und dann klappt eigendlich das programm nicht mehr. |
Die Zeit eines einzelnen Frames willst du haben? Sofern du SCREENSYNC verwendest hat jeder Frame die gleiche Dauer (nämlich die vertikale Bildschirmwiederholungsfrequenz bzw. deren -periodendauer).
Falls du nicht Screensync nimmst, kannst du einfach mittels des Timers die Zeit abfragen.
Code: | DIM AS SINGLE startFrame, endFrame, dt
startFrame = TIMER
' Hier wird gezeichnet
endFrame = TIMER
dt = endFrame - startFrame |
dt ist dann die Dauer des aktuellen Frames.
frebas hat Folgendes geschrieben: |
2. in meinem programm bewegt sich eine spielfigur gesteuert mit den pfeiltasten aber die geschwindigkeit der bewegung hängt leider davon ab wie hoch die wiederhohl rate eingestellt ist. kann man das irgendwie ändern? |
Ja, kannst du -> http://forum.qbasic.at/viewtopic.php?t=4111 _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 13:12 Titel: |
|
|
[quote="Stormy"] frebas hat Folgendes geschrieben: |
Falls du nicht Screensync nimmst, kannst du einfach mittels des Timers die Zeit abfragen.
Code: | DIM AS SINGLE startFrame, endFrame, dt
startFrame = TIMER
' Hier wird gezeichnet
endFrame = TIMER
dt = endFrame - startFrame |
dt ist dann die Dauer des aktuellen Frames.
|
genauo habe ich das aber die zahlen werden sehr schnell zu groß. Ich hab mal so eine fps anzeige eingebaut und wenn der rechner nicht gerade erst hoch gefahren wurde wird als fps INF angezeigt.
edit: ich werde erstmal dein tutorial lesen! |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 23.06.2008, 13:19 Titel: |
|
|
Probier das mal so:
Code: | screenres 640,480,32
dim as single fpc
dim as integer fps, curfps
do
fps += 1
if timer >= fpc then
fpc = timer + 1
curfps = fps
fps = 0
end if
screenlock
cls
locate 1,1: print curfps
screenunlock
screensync
loop until multikey(1) |
Ist zwar ein naiver Ansatz. Aber müsste funktionieren. screensync kannst du auch probeweise auskommentieren. _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 13:59 Titel: |
|
|
ich habe das in meinem programm so gemacht:
Code: | SCREENRES 640,480,32
dim as single fps, zeitstart, zeitende
dim as integer a, b
DO
zeitstart = timer
'berechnungen:
for a = 1 to 20
b = a * a
next a
fps = 1/(zeitende-zeitstart)
screenlock
cls
locate 1
print fps
screenunlock
zeitende = timer
LOOP UNTIL MULTIKEY(1) |
aber es scheint ja nicht richtig zu klappen  |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 23.06.2008, 14:31 Titel: |
|
|
Kann mir jemand sagen warum mein fps code nicht richtig klappt? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.06.2008, 14:41 Titel: |
|
|
ich weiß ja nicht, was du unter FPS verstehst, aber unter FPS verstehe ich Frames pro Sekunde. Und das ist kein Bruch...
Code: |
Dim as Integer iFrameCount = 0
Dim as double dFrameStart = timer
Do
iFrameCount+=1
if timer > dFrameStart then
Print "Frames: " & iFrameCount
iFrameCount = 0
dFrameStart = Timer
end if
loop
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|