Aktuelle Zeit: 20.11.2014 22:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 93 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5 ... 10  Nächste
Autor Nachricht
 Betreff des Beitrags: Diskussion über Frequently Asked Questions
BeitragVerfasst: 09.04.2010 15:48 
Offline
BotHunter
Benutzeravatar

Registriert: 26.12.2005 14:14
Wohnort:   
N'Tag! Da ich jetzt auch Kaerus Meinung teile, dass eine "very ultimate FAQ" nichts schlechtes wäre, hab ich mich mal inspirieren lassen und die gefragten Fragen gesammelt, die ich am öftesten und interessantesten fand. Ich werde wenn ich wieder etwas mehr Zeit habe auch die bis jetzt geschriebenen FAQ-Threads in diesem Subforum verliken, weil wir wollen das Rad ja kein zweites Mal erfinden.

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.
Da dies nicht immer der Fall ist geht man besser auf Nummer Sicher und fügt die o.g. Zeile am Anfang des Codes ein.

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
Für den Abbruch beim Drücken einer Taste oder beom Bewegen der Maus muss man selber sorgen. Aber hier einmal das wichtigste für die Abfragen:
Code:
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


F: Gibt es einen Unterschied zwischen Microsofts INI- und PureBasics PREFS-Dateien?
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

ToDo:
  • 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

_________________
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl


Zuletzt geändert von Mok am 09.04.2010 18:05, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 15:55 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Bevor jetzt alle hier diskutieren, solltest du besser gleich noch n Thema erstellen:
Diskussion - Frequently Asked Questions

und die MODs verschieben dann das hier!

----

Zum Thema:
So, ist das sehr unübersichtlich, denn eh man seine Frage gefunden hat vergehen Jahre ...
Vllt sollte man im ersten Beitrag nur Fragen zu stehen haben (Alphabetisch geordnet)

und jede Frage zu einem Beitrag verlinken der darunter kommt.
Das mag zwar für mini-Antworten zu viel sein, ist aber dafür um so übersichtlicher

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 15:57 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
Hallo,

Tolle Idee. Ich würde allerdings die Abstände größer machen zwischen den Fragen, da ich z.B. in der Zeile mit dem Keks-Smiley etwas verwirrt werde, oder eben so wie STARGATE es vorgeschlagen hat: im ersten Posting nur Fragen und Links, die zu den einzelnen Beiträgen springen. Außerdem geht bei MessageRequestern auch Strg + C und Strg + V. Dann wäre der Text lesbar und man müsste kein Bild mehr laden.

_________________
Mit freundlichen Grüßen,
Daniel http://www.bradan.eu/
Bild
Ich bearbeite meine Postings häufig, kurz nachdem ich sie abgeschickt habe. - Windows 7 64bit, PureBasic: Die aktuelle Version
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 16:02 
Mok hat geschrieben:
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.
Da dies nicht immer der Fall ist geht man besser auf Nummer Sicher und fügt die o.g. Zeile am Anfang des Codes ein.

Es ist keinesfalls nötig vor Beginn des eigentlichen Programmes immer SetCurrentDirectory(GetPathPart(ProgramFilename())) auszuführen. Z.B. brauche ich das nie!
Zum einen will man vielleich gar nicht auf Dateien im Programmverzeichnis zugreifen sondern z.B. auf Dateien im Verzeichnis %APPDATA%, zum anderen kennt man das Programmverzeichnis sowieso schon, es ist nämlich GetPathPart(ProgramFilename()). Es ist mitnichten erforderlich, das mit SetCurrentDirectory() als aktuelles Verzeichnis zu setzen.

Gruß, Little John


Zuletzt geändert von Little John am 09.04.2010 16:47, insgesamt 2-mal geändert.

Nach oben
  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 16:11 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Danke für die Arbeit, aber leider in dieser Form nicht besonders nützlich.

Total unübersichtlich.
Viele nicht ganz korrekte Aussagen
usw. (haben die anderen schon gesagt)

Vernünftig lösen läßt sich das ganze IMHO nur mit einem Wiki.

_________________
PureBasic 5.31 | Windows 7 SP1 (x64) | Linux-Mint 17 Cinnamon (x64) | RealSource
Bild

Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 16:21 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Aber ein WIKI würde auch nicht "davor schützen" das immer wieder die ähnlichen Fragen gestellt werden.
Denn wenn einer die Suche nicht nutzen will, dann ist es egal wo er sie nicht nutzt ^^



Weitere FAQ:


Frage: Gibt es in PureBasic einen Variablen-Typ Boolean?
Antwort: 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



EDIT:

Was mir eben noch einfällt:
- Bei Antworten sollten imer genug weiterführende Links dazustehen!
- In den Antworten sollten Behauptungen oder Infos immer mit Quellenverweis stehen:
"Das ist Verboten!" STARGÅTE und dann auch den Link wo er es gesagt hat...

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 16:38 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:29
STARGÅTE hat geschrieben:
Frage: Gibt es in PureBasic einen Variablen-Typ Boolean?
Antwort: Nein. True und False sind in PureBasic nur Integerzahlen mit den Konstanten: #True = 1 und #False = 0

Die Werte der Konstanten sind 1 und 0!

Zusätzliche Information: Ein Wert <> 0 (also auch -10, 1234, ... und nicht nur die Konstante #TRUE) wird in Abfragen (IF, While, Until) als WAHR gewertet!
Code:
; Deshalb ist auch folgendes Möglich:
*mem = AllocateMemory( BlockSize )
    ; Speicher konnte nicht reserviert werden!
    ; ...
If Not *mem
EndIf

_________________
Windows 8 / Windows 7 / Windows XP (als VM)
PB Last Final / Last Beta Testing


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 17:55 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
Ah noch was:
Zitat:
F: Ich will eine DLL linken (= EXE daraus machen), bekomme aber folgenden Fehler:
Bild Was mache ich falsch?
A: DLLs und statische Libs mögen anscheinend keine Static-Variablen. Also alles was Shared ist am besten zu Protected machen.


Also wenn was static ist soll man shared zu protected machen? :lol:

_________________
Mit freundlichen Grüßen,
Daniel http://www.bradan.eu/
Bild
Ich bearbeite meine Postings häufig, kurz nachdem ich sie abgeschickt habe. - Windows 7 64bit, PureBasic: Die aktuelle Version
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 18:02 
Offline
BotHunter
Benutzeravatar

Registriert: 26.12.2005 14:14
Wohnort:   
DarkDragon hat geschrieben:
Also wenn was static ist soll man shared zu protected machen? :lol:

Ähm... Kommentar folgt später :lol:

_________________
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frequently Asked Questions
BeitragVerfasst: 09.04.2010 18:06 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: PureBoard
@Mok
Also hier mein Senf...

Dein FAQ in dieser Form finde ich sehr unübersichtlich.
Ist zwar eine nette Idee, aber ich würds lieber auf einer extra Seite machen (vll. als Wiki oder am besten eine eigene Seite basteln).
Da kannst du all deine Fragen in Kategorien aufspalten.
Deine Fragen würde ich zuklappen, so dass man die Antworten aufklappen kann.
Und eine SuFu wär dann auch nicht schlecht.
Einige deiner Antworten müssen noch überarbeitet werden.
Einige sind entweder falsch oder unvollständig.

Aber ansonsten keine schlechte Idee.

_________________
Bild Bild
Bild| Downloads | WinAPI Library | Tipps und Tricks | Backups (28.10.2014) (+223 Dateien (680 MB))
EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Avira? Nein Danke | Schneller als die Telekom erlaubt | Wer Windoof sagt, ist selber doof | WinAPI forever | Bei Problemen bitte Beispielcode posten


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 93 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5 ... 10  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye