Seite 3 von 4
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 20:47
von GPI
Das mit WaitWindowEvent() war eigentlich ein Fehler von mir, ich wollte WindowEvent() benutzen...
Wobei ich VSYNC (#PB_Screen_WaitSynchronization) beim Screen immer an lassen würde. Macht weniger Probleme. Man sollte nur beachten, das die Wiederholrate nicht Fix ist. Mein NUC bspw. hat bei einer 4k-Auflösung maximal 30hz. Mehr kann die Kiste nicht. Genauso gibts Gaming-Monitore mit 144hz.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 20:50
von GPI
diceman hat geschrieben:ccode_new hat geschrieben:
Um die PureBasic-Mausfunktionen würde ich einen meilenweiten Bogen schlagen und die SDL direkt (nur bei Linux) verwenden.
Okay, warum?

Ich hab hier ein Surface-Pro 4. Auflösung ist jenseits der 1080p und in Windows ist ein Scaling-Faktor von 150% eingestellt. Die Mouse-Befehle können leider mit der Scalierung überhaupt nicht umgehen. Egal wie man die Maus bewegt, der "Mauscursor" düst in rekordgeschwindigkeit in die rechte untere ecke.
Ist der Bug eigentlich mit der aktuellen Version, die heute raus kam, behoben?
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 21:05
von ccode_new
Das Problem ist das PureBasic eine ganze Menge Bug's hat die seit ewigen Jahren nicht behoben werden.
Stattdessen werden lieber funktionierende Funktionen (wie ein ein AddPackFile() was ohne vorheriger Dekomprimierung Dateien in ein Zip-Archiv packen kann -einfach entfernt.) oder, oder, oder....
Der Mausbug ist doch schon ein Urgestein bei Purebasic.
Und Spiderbasic hat dazu noch diverse Grafikbugs innerhalb der 2D-Lib.
Und warum kann man bei Spiderbasic nur unter Windows für Android exportieren ? Wobei das mit den von Spiderbasic verwendeten Mitteln doch unter Linux auch einfach möglich wäre, oder?
Und statt immer weiter an dieser mangelhaften 3D-Engine (OGRE) zu basteln sollte lieber mal eine gewaltige BUG-FIX-Version folgen.
Also an Fred und Beteiligte: Lieber erst einmal Altlasten beseitigen.
Mensch, PureBasic ist eine proprietäre Software.
Dies war nur eine (un)bedeutende Meinung.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 23:26
von diceman
Ich mache Fortschritte!
Ein kleines Paint-Programm (linke Maustaste malen, rechte Maustaste radieren, ESC Programm beenden).
Code: Alles auswählen
EnableExplicit
Define xMax = 800
Define yMax = 600
Define leftButtonPressed, rightButtonPressed, anyButtonPressed
Define drawColor
Define penSize
InitSprite()
Define mainWindow = OpenWindow(#PB_Any,10,10,xMax,yMax,"PoorMan'sPaint (Press ESC to exit)")
OpenWindowedScreen(WindowID(mainWindow),0,0,xMax,yMax)
InitMouse()
InitKeyboard()
Define drawBoard = CreateImage(#PB_Any,xMax,yMax)
Repeat
ExamineMouse()
ExamineKeyboard()
leftButtonPressed = MouseButton(#PB_MouseButton_Left)
rightButtonPressed = MouseButton(#PB_MouseButton_Right)
anyButtonPressed = leftButtonPressed + rightButtonPressed
If StartDrawing(ScreenOutput())
If Not rightButtonPressed
penSize = 10
drawColor = RGB(255,255,255)
Else
penSize = 20 ;Radiergummi mit größerem Radius
drawColor = RGB(0,0,0)
EndIf
DrawImage(ImageID(drawBoard),0,0)
DrawingMode(#PB_2DDrawing_Outlined)
Circle(MouseX(),MouseY(),penSize,RGB(255,0,0)) ;Pinsel zeigen
If anyButtonPressed
StopDrawing()
StartDrawing(ImageOutput(drawBoard))
DrawingMode(#PB_2DDrawing_Default)
Circle(MouseX(),MouseY(),penSize,drawColor)
EndIf
StopDrawing()
EndIf
FlipBuffers()
WaitWindowEvent()
Until KeyboardPushed(#PB_Key_Escape)
Delay(250)
End
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 05.02.2018 10:06
von RSBasic
Sehr gut
Ich finde es außerdem super, dass du sogar EnableExplicit verwendest. Das machen nicht viele, obwohl es empfohlen ist, weil man damit u.a. Schreibfehler vermeidet.
Tipp: Du kannst gerne Leerzeichen nach einem Komma in der Parameterliste benutzen. Es ist einfach übersichtlicher.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 05.02.2018 10:57
von Kurzer
Cool.
Noch ein Hinweis: Die folgenden Befehle geben auch alle ein Ergebnis zurück, mit dem man prüfen kann (und sollte), ob der Vorgang überhaut geklappt hat.
Code: Alles auswählen
InitSprite()
OpenWindowedScreen()
InitMouse()
InitKeyboard()
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 05.02.2018 11:13
von diceman
RSBasic hat geschrieben:Sehr gut
Ich finde es außerdem super, dass du sogar EnableExplicit verwendest. Das machen nicht viele, obwohl es empfohlen ist, weil man damit u.a. Schreibfehler vermeidet.
Um ehrlich zu sein, bin ich auf "EnableExplicit" durch deine Signatur aufmerksam geworden - hab's dann direkt in der F1-Hilfe gesucht und fand das eine gute Sache.

In Blitzbasic mußte ich Variablen, die ich in Funktionen (= PB-Prozeduren) weiterverwenden, als "Global" deklarieren (nicht deklarierte Variablen wurden automatisch als Local angesehen). In PureBasic wird das noch etwas strenger gehandhabt, was ich aber nicht schlimm finde. Das hilft einem auf lange Sicht dabei, sich einen sauberen, übersichtlichen, abstrakten (= wiederverwertbaren) Programmierstil zu erarbeiten.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 05.02.2018 11:15
von diceman
Kurzer hat geschrieben:Noch ein Hinweis: Die folgenden Befehle geben auch alle ein Ergebnis zurück, mit dem man prüfen kann (und sollte), ob der Vorgang überhaut geklappt hat. [...]
Verstanden.
Wurde mir ja weiter oben schon geraten.
Ich werde es mir angewöhnen (bin halt noch etwas "Blitz"-geschädigt).

Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 05.02.2018 11:25
von RSBasic
Das freut mich.
Ich weiß nicht, ob du diese Seiten bereits kennst, aber falls nicht, hier ein paar nützliche Links:
Ein weiteres Einsteigerbuch:
http://www.purebasic.fr/german/viewtopi ... =1&t=23627
CodeArchiv (neu):
https://github.com/SicroAtGit/PureBasic ... iv-Rebirth
CodeArchiv (alt):
http://www.purearea.net/pb/CodeArchiv/German.html
Wenn du PB ausreichend getestet hast und damit zufrieden bist, kannst du auf der folgenden Seite bestellen:
http://www.purearea.net/pb/german/indexpb.htm
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 05.02.2018 20:56
von diceman
So, ich habe mir mal eine kleine Header-Prozedur für mein
custom Library-File gebastelt, die alle für mich relevanten Instanzen initialisiert, so daß ich so bei jedem neuen Projekt schnell zum spaßigen Teil übergehen kann:
Code: Alles auswählen
Procedure createWindow(x,y,depth,exeName.s)
Define window
If Not InitSprite() : Debug "InitSprite() failed" : End : EndIf
If depth = 0
window = OpenWindow(#PB_Any,10,10,x,y,exeName)
If Not window : Debug "Window-Creation failed" : End : EndIf
If Not OpenWindowedScreen(WindowID(window),0,0,x,y) : Debug "Screen-Creation failed" : End : EndIf
Else
If Not OpenScreen(x,y,depth,exeName) : Debug "Fullscreen failed" : End : EndIf
EndIf
If Not InitMouse() : Debug "InitMouse() failed" : End : EndIf
If Not InitKeyboard() : Debug "InitKeyboard() failed" : End : EndIf
ProcedureReturn depth
EndProcedure
Define Fullscreen = createWindow(1024,768,32,"example.exe")
Wenn ich ein Fenster haben will, rufe ich die Prozedur createWindow() mit depth = 0 auf. Ansonsten initialisiert das Programm den Fullscreen-Mode. Die Prozedur gibt die Farbtiefe zurück an die aufrufende Check-Variable (Fullscreen), so daß ich dann in der Hauptschleife, je nachdem ob Fullscreen = 0 oder > 0 ist, den essentiellen WaitWindowEvent()-Befehl aufrufen, bzw. auslassen kann: