Frage: Warum sollte ich vor Beginn des eigentlichen Programmes immer SetCurrentDirectory(GetPathPart(GetProgramFilename())) machen?
Antwort: Mit der o.g. Befehlsfolge setzt man den aktiven Pfad auf den Ort der Executable. Wenn ihr also LoadSound(0,"test.wav") aufruft, wird im Programmordner nach der test.wav gesucht. Aber wozu das ganze? Das ganze könnte man vergessen, wenn
- Das Programm durch doppelklick im Explorer gestartet wurde
- Das Programm per Verknüpfung ausgeführt wird, in der "Ausführen in..." angegeben ist
- Bei RunProgram() der 3. Parameter angegeben wurde.
F: Was ist der Unterschied zwischen IncludePath und SetCurrentDirectory()?
A: Alle Include-Funktionen sind Compilerfunktionen und alle Befehle sind Laufzeitbefehle. Was heißt das? Das heißt im Endeffekt, dass IncludePath nur für Include-Funktionen vorgesehen ist, und SetCurrentDirectory() für LaufzeitBefehle à la LoadXY().
F: Gibt es eine Hilfe für die WinAPI?
A: Ja! Sie liegt noch im (ur)alten Format .HLP vor und kann nur noch über das Windows SDK geladen werden. In der IDE kann man dann, wenn sich der Cursor über einem API-Befehl befindet, eine Tastenkombination drücken, die die Hilfe aufruft. Dazu braucht man jetzt leider ein extra Tool: LaunchWindowsSDK. (Früher ging's auch ohne, die Schuld daran hat das WinSDK)
F: Gibt es einen PureBasic-Decompiler?
A: Nein! Und sowas wird es dank Multi-Pass Compilierung auch nie geben. Zwar kann man den durch 2-Pass-Compilierung entstandenen Assemblercode disassemblieren, aber den originalen PB-Code bekommt man keinesfalls, da den PureBasic-Befehlen durch den Optimierungsvorgang während dem Compilen keine eindeutigen ASM-Codegruppen zugeordnet sind. Wenn ihr das nicht versteht ist es auch egal: Enteder das, was ihr wollt, ist OpenSource oder ihr müsst halt selber coden!
F: Gibt es einen Befehl, der verbietet undeklarierte Variablen zu benutzen?
A: Ja, dieser nennt sich EnableExplicit und sollte ausnahmslos bei jedem Projekt, das z. B. nicht eine OGRE-Demo ist, benutzt werden.
F: Muss ein Sprite, aus dem ich einen 3DSprite machen will unbedingt 16*16, 32*32, 64*64, 128*128 oder 256*256 sein?
A: Müssen nicht, es wird aber empfohlen. Extrem unpassende Verhältnisse (243x722) funzen auf NVidia-Karten jedenfalls besser als auf ATI-Karten. Außerdem funktionieren 3D-Funktionen mit 2^x * 2^y oder gar (2^n)² wesentlich schneller. Falls ihr aber eine Textur oder sonstwas habt, das zwingend in einem anderen Format sein muss, könntet ihr einen Schwedenrand (schwarzer Rand rundum das Sprite) machen, sofern nicht schon eine andere Farbe für TransparentSprite vorgesehen ist. Wenn schon, müsst ihr entweder langsame Grafik oder verzerrte Bilder in Kauf nehmen.
F: Wie finde ich das Windows-Verzeichnis/Temp-Verzeichnis?
A: Windows und Linux besitzen sog. Umgebungsvariablen. %windir% zeigt auf {Buchstabe}\Windows und %tmp% auf das temporäre Verzeichnis (meist C:\Users\<Name>\AppData\Local\Temp). PB bietet aber auch einen Befehl namens GetTemporaryDirectory() an, der den Namen des Temp-Verzeichnisses liefert.
F: Kann man zufällige Fließkommazahlen erzeugen?
A: Dafür gibt es keine native Funktion. STARGÅTE hat aber mal ein Makro dafür geschrieben: Klick!
F: Wenn ich F5 drücke bekomme ich folgende Fehlermeldung: Die Quellcodedatei oder das Projekt wird bereits von der IDE debuggt usw.
A: Das Programm läuft noch, die Runtime wurde aber vom Debugger angehalten. Also auf den Totenkopf klicken und danach sorgfältig nach Fehlern suchen (Arrayüberlauf, StackOverflow usw.)
F: Ich will eine DLL linken (= EXE daraus machen), bekomme aber einen PureBasic Assembler error. Was mache ich falsch?
A: DLLs und statische Libs mögen anscheinend keine Static-Variablen. Also alles was Static ist am besten zu Protected machen.
F: Ich habe eine GUI mit dem VisualDesigner erstellt und bekomme in der IDE aber eine Warnung wegen CreateGadgetList() ist das weiter schlimm?
A: Schlimm ist es nicht, CreateGadgetList() hat seit v4.00 aber keine Funktion mehr und kann getrost gelöscht werden.
F: Ich will ein 3D-Spiel machen! Welche Engine soll ich nehmen?
A: OGRE ist seit v4.00 in PureBasic mit dabei, allerdings gibt es einen Haufen anderer Engines auch, die einen PureBasic-Wrapper haben. X0r hat dazu mal einen seperaten Thread gemacht: Klick!. Im Großen und Ganzen ist es die Entscheidung des Programmierers, es gibt einfach keine perfekte Engine. Ich persönlich bevorzuge N3xt-D, eine weiterentwickelte Irrlicht-Engine.
F: Ich habe Code aus einer veralteten PureBasic-Version. Muss ich alles neu schreiben?
A: Nein, jemand hat dafür ein eigenes Tool entwickelt, das ich dank der verwurschtelten Forum-SuFu nicht finde
F: Gibt es Gadgets für den Screen?
A: Nicht nativ, aber SGX von #NULL ist eine starke Lösung: Klick!
F: Kann man iin PureBasic auch Bildschirmschoner schreiben?
A: Da ein Bildschirmschoner nichts anderes ist als eine EXE im SCR-Format, ist es möglich, jedoch sollten per ProgramParameter() folgende Parameter abgefragt werden:
- /c - Zeigt das "Einstellungen"-Fenster
- /p <WindowID> - Zeigt den Schoner als 'Child' von <WindowID>. Nicht wirklich nötig.
- /s - Führt den Schonder aus
Code: Alles auswählen
InitMouse() : InitKeyboard()
MX = MouseX()
MY = MouseY()
Exit = #False
Repeat
ExamineMouse() : ExamineKeyboard()
If (MouseX() <> MX) Or (MouseY <> MY) Or KeyboardPushed(#PB_All) Or MouseButton(#PB_MouseButton_Left) Or MouseButton(#PB_MouseButton_Middle) Or MouseButton(#PB_MouseButton_Right)
Exit = #True
EndIf
Until Exit = #True
A: Der einzige sichtbare Unterschied sind die Kommentarzeilen: Für PB ist es ein ";" und für Windows ein "#". Desweiteren kann man mit der API nur INIs lesen.
F: Ich möchte eine MP3-Datei abspielen. Geht das in PB?
A: Nur über einen Umweg durch die Movie-Lib: Statt die Datei als Sound zu laden, müsst ihr sie einfach als Movie laden und nachher auch abspielen. Meine Empfehlung: Nutzt OGG-Vorbis Sounddateien! Das Qualität/Größen-Verhältnis ist besser und ihr braucht auch nur UseOGGSoundDecoder() statt einer eigenen Lib.
F: Was hat es mit dem "InlineASM-Unterstützung einschalten" im Compiler-Menü auf sich?
A: Wenn man den Punkt aktiviert, ist es auch möglich NAsm (Netwide Assembler) zu programmieren (viele PB-Befehle wurden auch damit geschrieben). Der Vorteil ist eine ziemlich hohe Geschwindigkeit beim Compiliervorgang, allerdings sind Assemblersprachen wieder eine andere Ebene und deshalb hat das Forum wenig damit zu tun.
F: Was ist so schlimm an Threads?
A: Threads bedeuten ein hohes Risiko für die Programmstabilität. Threads gehören zu einem der letzten Kapitel, die ein PB-Programmierer lernen sollte. Um mit Threads sauber arbeiten zu können muss vor dem Programmieren genau überlegt werden, was benötigt wird und wie das Programm funktionieren soll. Fehlerhaftes nutzen von Threads führt in jedem Fall zur instabilität eines Programms und damit meistens undefinierten Fehlern!
F: Gibt es in PureBasic bool'sche Variablen?
A: Nein. #True und #False sind in PureBasic nur Integerzahlen mit den Konstanten: #True = 1 und #False = 0.
Frage: Darf man mit Logischen Ausdrücken rechnen?
Antwort: Offiziell nicht!
Logische Ausdrücke haben in PureBasic entwerder das Ergebnis 0 wenn der Ausdruck falsch ist, oder nicht 0.
Die Annahme das Wahr immer gleich 1 ist (was in PureBasic also #True) ist, muss nicht immer zutreffen.
Logischen Ausdrücke sollte immer in einem If Block stehen, und erst in der Fallunterscheidung, dann einer Variablen ein Wert zugeordnet werden.
Links: Operator NOT, #True is only 1, not all True, Vergleichs-Ausdruck liefert keinen boolschen Wert
Anmerkungen:
- So, das war's jetzt erstmal. Wenn noch jemandem was einfällt kann er's ja drunterschreiben und ich oder ein Admin/Mod editiern's dann dazu.
- Wenn jemand Wünsche, Anregungen, Beschwerden oder sonstwas bezüglich des Threads hat, bitte ein eigenes Thema eröffnen oder mir eine PN schicken, weil der Thread sonst unübersichtlich wird.
- Wär auch schön, wenn jemand den Thread sticky macht, oder löscht, falls zu viel relevanzloses Zeuchs drin steht.
- Evtl. auf die Index-Seite verlinken, damit's jeder Neuling gleich ins Auge sticht
- Linkliste für andere FAQ-Threads
- Evtl. themenbasiertes Inhaltsverzeichnis, falls noch mehr Fragen reinkommen
MfG, Mok
____________________________________________________________________________
Titel geändert.
Nutzt diesen Thread um euch sinnvoll abzusprechen und euer Team zu bilden.
den endgültigen FAG-Thread der dann sticky gemacht wird, kann euer Team dann neu anfangen.
- Kaeru