Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

ein bmp bild vor einem anderen anzeigen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 20.06.2008, 16:11    Titel: ein bmp bild vor einem anderen anzeigen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.06.2008, 16:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 20.06.2008, 16:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 20.06.2008, 16:26    Titel: Antworten mit Zitat

wenn ich trans weglasse flackert das bild auch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.06.2008, 16:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 20.06.2008, 22:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 12:26    Titel: Antworten mit Zitat

Gibt es eine andere Möglichkeit das flackern zu unterbinden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 12:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 23.06.2008, 12:34    Titel: Antworten mit Zitat

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. zwinkern
_________________
+++ 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.06.2008, 12:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 12:49    Titel: Antworten mit Zitat

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 neutral

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
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 12:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.06.2008, 12:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 13:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 23.06.2008, 13:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 13:12    Titel: Antworten mit Zitat

[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
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 23.06.2008, 13:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 13:59    Titel: Antworten mit Zitat

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 traurig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 23.06.2008, 14:31    Titel: Antworten mit Zitat

Kann mir jemand sagen warum mein fps code nicht richtig klappt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.06.2008, 14:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz