Blitzbasic-Hobby-Progger will umschulen

Für allgemeine Fragen zur Programmierung mit PureBasic.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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?
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag von RSBasic »

Sehr gut :allright:
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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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()
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag von diceman »

RSBasic hat geschrieben:Sehr gut :allright:
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. 8) 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.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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. :allright:
Wurde mir ja weiter oben schon geraten.
Ich werde es mir angewöhnen (bin halt noch etwas "Blitz"-geschädigt). :wink:
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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: :lurk:

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:

Code: Alles auswählen

If Fullscreen = 0
    WaitWindowEvent()
EndIf
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Antworten