Programm läuft unter B+ schlechter wie unter B3D..?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Myn

Betreff: Programm läuft unter B+ schlechter wie unter B3D..?

BeitragMi, Aug 17, 2011 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

das wollte ich eigentlich schon vor Monaten gefragt haben^^

Mein Programm (Spiel) hab ich mit B3D geschrieben.
Es baut nur auf 2D Grafik und müsste ja theoretisch auch unter B+ laufen.

Das geht auch, jedoch nur mit 1 bis 3 FPS anstatt 30 eingestellten...?

Gibt es irgentwelche Funktionen die in B+ das Programm verlangsamen oder Fehler erzeugen
die den Ablauf so verlangsamen ...?



mfg
Myn

Pummelie

BeitragMi, Aug 17, 2011 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du nicht den Backbuffer eingestellt?
BlitzBasic: [AUSKLAPPEN]
SetBuffer(BackBuffer())


Du kannst auch mal folgendes an den Anfang deines Programmes schreiben:
BlitzBasic: [AUSKLAPPEN]
SetGfxDriver(2)


Damit schaltest du OpenGL ein, was ein paar hundert mal schneller ist als DirectDraw 7.
It's done when it's done.
 

Myn

BeitragMi, Aug 17, 2011 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Habe ich natürlich Wink

2. Getestet, geht schon besser, aber im vergleich zu B3D immer noch seeeeehr langsam und nicht spielbar.

Ist B+ einfach langsamer ? Oder brauchen bestimme Funktionen vielleicht einfach noch einen Parameter so dass
Fehler enstehen ...?

PS.
Noch ne kleine Frage:

Mit der Input Funktion(B3D) und anderen Eingabe Methoden wie GetKey(B3D) kann ich keine Sonderzeichen sowie GROß Buchstaben eingeben, andere Spieler können das aber sehr wohl ..?
Bei meinem alten PC (Vista) und bei meinem neuen (Win7-64) geht es nicht.
Liegt das am PC an irgentwelchen Einstellungen ?

//EDIT In B+ geht das wunderbar, ein Grund weswegen ich Umsteigen möchte..^^

ZEVS

BeitragMi, Aug 17, 2011 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
@Pummelie: Der automatische BackBuffer ist ein Feature von B+ (dergleichen ist mir von B3D nicht bekannt).

Draw3D läuft unter B+ natürlich nicht. Dass B+ in 2D langsamer sein sollte, ist mir ehrlich gesagt unbekannt. Im Gegenteil, man kann durch die Event-Struktur sogar Zeit sparen, da die ganzen KeyDown- und KeyHit-Abfragen wegfallen. Da bräuchte ich jetzt wirklich ein bisschen Code.

ZEVS
 

Myn

BeitragMi, Aug 17, 2011 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Draw3D verwende ich auch nicht Wink

Was mir aber aufgefallen ist dass das Fortbewegen was durch die "Pfeiltasten" geht und
mit der Funktion "KeyDown" abgefragt wird nur nach mehrfachem drücken der Taste funktioniert.

Liegt es vielleicht an den

Code: [AUSKLAPPEN]
If KeyDown(200) Then ;Nach Oben


Abfragen..?

Eingeproggt

BeitragMi, Aug 17, 2011 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Verwendest du event. LockBuffer?
Das hat auf meiner neuen Graphikkarte damals (schon 2 Jahre her) das Spiel so dermaßen herunter gezogen, allen LockBuffer hatte 10ms gebraucht!

Glaube eher nicht dass Bei den Tastatur-Abfragen der Hund begraben ist.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Myn

BeitragMi, Aug 17, 2011 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein verwende ich auch nicht.

Aber es lamt schon im Hauptmenu, wo wirklich nur RectsOverlap & Drawimage+Maskimage zu finden ist.

ZEVS

BeitragMi, Aug 17, 2011 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Tastatur-Abfragen werden unter B+ normalerweise über Events realisiert. Das ergibt einen ganz anderen Mainloop. Die Erklärung ist hier. Damit sparst du dir alle Abfragen mittels KeyDown: Statt 30mal in der Sekunde nachzufragen ob eine Taste unten ist (und das pro Taste), lässt sich das Programm einfach bei jedem Tastendruck Bescheid sagen und speichert sich die Taste. Somit kann der Mainloop wesentlich schlanker (und schneller) werden.

Natürlich müsstest du dafür umschreiben. Aber wieso willst du dein Programm überhaupt in B+ laufen lassen?

ZEVS
 

Myn

BeitragMi, Aug 17, 2011 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
PS.
Noch ne kleine Frage:

Mit der Input Funktion(B3D) und anderen Eingabe Methoden wie GetKey(B3D) kann ich keine Sonderzeichen sowie GROß Buchstaben eingeben, andere Spieler können das aber sehr wohl ..?
Bei meinem alten PC (Vista) und bei meinem neuen (Win7-64) geht es nicht.
Liegt das am PC an irgentwelchen Einstellungen ?

//EDIT In B+ geht das wunderbar, ein Grund weswegen ich Umsteigen möchte..^^


Das ist ein Grund und außerdem läuft der MapEditor+GameServer+FileServer auch über B+.
Da es ja die gleichen Befehle wie B3D hat und ehr ein paar Verbesserungen wollte ich eben umsteigen.
Was ja so einfach doch nicht geht : /

Pummelie

BeitragDo, Aug 18, 2011 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig mir mal deinen Loop für das Menü (wenn du es hier nicht Preisgeben möchtest, gerne auch PN oder E-Mail) - vlt. ann ich ja den Speedsünder finden.
It's done when it's done.
 

Myn

BeitragFr, Aug 26, 2011 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube es liegt and en KeyDown() Abfragen.
Denn sobald man im Hauptmenu, das relativ normal läuft in die "Lobby" wechselt
in der ein Chat intigriert ist und deswegen auch KeyDow() verwendet wird sieht man wie der Mauszeiger
langsamer wird...

Teste das morgen mal genauer^^

Pummelie

BeitragSa, Aug 27, 2011 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ungewöhnlich...

Du kannst ja aber nun wo du B+ verwendest diese verschwenderischen Befehle ignorieren und dir mit dem Event-System was basteln.
It's done when it's done.
 

Myn

BeitragSo, Aug 28, 2011 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss mich nochmal Verbessern ^^

Es liegt am "Text" Befehl, im Hauptmenu gibt es nur 1mal "Text",
in der Lobby werden 20 Zeilen News angezeigt.


Im MapEditor von mir sieht man es noch besser.
Wenn ich mir das (2D Game+Tilemap) Datenfeld anzeigenlassen
und zwar nur einen kleinen Teil der gerade am Bildschirrm sichtbar ist habe
ich ~ 1 FPS ^^

In B3D läuft das ganze ohne Probleme .. :O ? (MapEditor)

Lobby

BeitragSo, Aug 28, 2011 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Das könnte damit zusammenhängen, dass BlitzPlus standardmäßig eine Kantenglättung beim Einzeichnen von Text verwendet.

Hier ein Beispielcode in BlitzBasic: [AUSKLAPPEN]
Graphics 400,300,32,2
SetBuffer(BackBuffer())

font=LoadFont("Comic Sans MS",40)

SetFont(font)
Text(0,0,"Hello World!")

Flip()
WaitKey()


In Blitz3D ausgeführt:
user posted image

In BlitzPlus ausgeführt:
user posted image

Mein Vorschlag wäre, hier den Text auf Bildbuffer vorzurendern, um anschließend nur noch einfache Bilder einzeichnen zu müssen.
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux
 

Myn

BeitragSo, Aug 28, 2011 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das der Text "besser" aussieht war mir schon aufgefallen, jetzt weiß ich warum ^^

Deinen Vorschlag habe ich nicht ganz verstanden, kannst du das etwas "ausführlicher" erklären wie du das meinst ..?

ZEVS

BeitragSo, Aug 28, 2011 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, das ist so gemeint:
BlitzBasic: [AUSKLAPPEN]
;Intalisation
Local image% = CreateImage(StringWidth(txt$), FontHeight())
SetBuffer ImageBuffer(image)
Text 0, 0, txt$
SetBuffer BackBuffer()
;...
;Mainloop
DrawImage image, x%, y%
;/Mainloop


ZEVS
 

Myn

BeitragMo, Aug 29, 2011 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Code verstehe ich und kann ihn nachvollziehen, aber ist das nicht sehr "aufwändigt" ..?
Auch nacher wenn man nicht nur 1 sondern ~20 / 30 Texte an verschiedenen Stellen hat etc. ...
Kann man das rendern von B+ bei Text nicht irgentwie deaktivieren, sodass es wie bei B3D
funktioniert ...?

ToeB

BeitragMo, Aug 29, 2011 2:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem vormalen bringt auch nur wirklich was wenn sich die Texte nicht dauernd ändern, z.B. Punkte anzeige, ne Event-Console o.ä. (Chat bspw.). Sonst ist es sogar noch langsamer.

Außer man speichert auch die Zahlen vor, also als eine art Image-Font, dann würde sich das wieder Rentieren, aber dann müsste man den Font auch mit Blitz3D (Ohne Kantenglättung) rendern und mitliefern ..

mfg ToeB


Edit :
Probiert mal diesen Code aus :
BlitzBasic: [AUSKLAPPEN]
Graphics 800, 600, 16, 2
SetBuffer BackBuffer( )

Const iter = 100000
Local ms = MilliSecs( ), i

For i = 1 To iter
Text 400, 300, "HALLO"
Next

Local time = MilliSecs() - ms

Flip
DebugLog "Time : "+time
DebugLog "Time per Text : "+(Float(time) / Float(iter))

WaitKey( )
End


Bei mir ergibt sich :
0.01951ms (BPlus)
0.04083ms (BB3D)

Man sieht, Blitz3D ist sogar langsamer !

(Ich habe allerdings XP, glaube Vista unterstützt ja nicht mehr das DirectDraw, sodass es hier sowieso schneller ist)

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Lobby

BeitragMo, Aug 29, 2011 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja Myn, genau so, wie ZEVS das freundlicherweise schon vorzeigte, meinte ich das. Es mag sicherlich sehr umständlich sein, das für einen bestehenden Code anzuwenden, könnte sich aber Umständen dennoch lohnen (sofern die Texte sich, wie ToeB schon richtig einwarf, nicht zu oft ändern).

ToeB, so ein direkter Vergleich ist eine gute Idee, denn bei mir fällt der Test mit deinem Code wie folgt aus (allerdings habe ich die Debuglogs mit Print-Befehlen ersetzt, damit die Geschwindigkeit, da im Release-Mode, für das letztendliche Ergebnis relevant ist):
In Blitz3D: 0.10105ms
In BlitzPlus: 0.71731ms
Getestet unter Windows7. (Die Zeitangaben beziehen sich auf den durchschnittlichen einzelnen Text-Zeichenbefehl-Aufruf)

Wenn ich nun allerdings in BlitzPlus das anfangs schon erwähnte SetGfxDriver(2) setze, scheint er tatsächlich auf die Kantenglättung zu verzichten (zumindest ist von ihr dann bei anderen Schriftarten nichts mehr zu sehen) und damit auch nur noch 0.08090ms zu brauchen.
Myn, jetzt wäre interessant, was dieser Test bei dir für Zahlen liefert Wink .
 

Myn

BeitragMo, Aug 29, 2011 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
B3D: 0.01129
B+: hab mir da es auch in print liefern lassen, jedoch kam nach 20 sec immer noch nichts und vom Programm keine Rückmeldung...

Mit welche Font hat man keine Kantenglättung? Ich benutze Arial derzeit...

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group