Ich besitze nun PB 4.10

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Ich besitze nun PB 4.10

Beitrag von STARGÅTE »

Tachchen liebe PB-Freunde,

der Tag auf den viele von euch soo lange gewartet haben ist gekommen.
Der Weihnachtsmann brachte mir PureBasic 4.10 :D

Natürlich kannte ich mich schon etwas in 4.10 aus, da ich ja hier die meisten Code-Beispiele in 4.x geschrieben sind und so gibt es relativ schnell mein neustes (noch unveröffendlichte) Spiel von 3.3 auf 4.10 zu bringen.

Doch leider gibt es schon ein paar Probleme die auftauchten und ich habe auch gleich ein paar Fragen:

Macors
Ist es nun besser viele Procedureren die nicht sehr groß sind als Marco zu schreiben:

Code: Alles auswählen

Macro ZoomRotateDisplaySprite3DZOOM(Sprite, x, y, xx, w, h)
 ZoomSprite3D(Sprite, (xx)*ZOOM, (xx)*ZOOM)
 RotateSprite3D(Sprite, (w)+90,0)
 DisplaySprite3D(Sprite, (x)*ZOOM, (y)*ZOOM, h)
EndMacro
Beispiel:

Code: Alles auswählen

ZoomRotateDisplaySprite3DZOOM(1, x, y, E()\G*(0.80+Sin(Kreis*5*#b)/5), Winkel, Hell) 
Warum ich das brauche soll erst mal egal sein, das wichtige hierdran ist ja was schneller ist.
Bei der Procedure wird nur einmal der wert für xx berechnet und dnan in der Procedure als 2 mal xx verwendet.
Bei dem Marco wird im Spiel ja nix übergeben, da das Macro ja für den Compiler ist, dafür ist jedoch zwei mal die selber Formal drin, was dann vllt Zeitverlust bringt.

Alt-TAB und ThreadSafe
Ein guter Grund für 4. war ja, dass die Sprites nicht mehr neu geladen werden müssen wenn man mit Alt-TAB kurz wechselt.
Doch in 4.x treten folgende Probleme auf :

Lasse ich das Programm mit Debugger laufen und gehe dann mit Alt-TAB raus, geht meine EXE einfach aus, (ohne Fehlermeldung, ohne Debuggermeldung), damit läuft der DEbugger einfach weiter.
Lasse ich das programm ohne Debugger laufen, läuft es ohne Probleme.
Schalte ich jedoch den ThreadSafeModus ein (den ich brauche) dann bekomme ich folgende Debuggermeldung wenn ich mit Alt-TAB rausgehe:
"[ERROR] Invalid memory access. (read error a adress 7296)" dabei ist FlipBuffers() rot unterlegt.
lasse ich das programm ohne Debugger laufen stürzt es mit einer WIN-Fehlermeldung einfach ab.

Ich hoffe ihr könnt mir Helfen, damit 4.x langsam zur Primärsprache von mir wird...
Zuletzt geändert von STARGÅTE am 29.12.2007 13:56, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ich besitze nun PB 4.10 - Habe jedoch gleich 2 Fragen

Beitrag von Kiffi »

STARGÅTE hat geschrieben:Der Weihnachtsmann brachte mir PureBasic 4.10 :D
Bild
das ich das noch erleben darf! :-)
STARGÅTE hat geschrieben:Bei dem Marco wird im Spiel ja nix übergeben, da das Macro ja für den Compiler ist, dafür ist jedoch zwei mal die selber Formal drin, was dann vllt Zeitverlust bringt.
nö, die Exe wird lediglich größer, aber nicht langsamer.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Das Macro wird halt einfach beim Compilen durch den Code ersetzt, den du für dieses Macro definiert hast. Natürlich ist es bei Formeln ratsam, die benötigten Dinge nur einmal zu berechnen, und die Werte dann in einer Variable zu speichern, anstatt sie jedes mal mit deinem Makro neu berechnen zu lassen, wenn du das Resultat brauchst. Aber das wusstest du sicher eh schon... <)
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hallo STARGÅTE, ...

also erst mal Glückwunsch zur neuen 4.10er. :allright:
Ich schätze mal Du wirst sie in kürzester Zeit lieben lernen. :mrgreen:

Zu Deinem Macro:
In dem von Dir geschilderten Fall dürfte das Macro langsamer sein als eine Procedur, da Du ja (wie bereits erwähnt) die komplexe Formel 2 mal berechnest.
Sinnvoller wäre dann wohl, wenn Du das Ergebnis von "xx" am Anfang des Macros einmalig in eine weitere Variable schreiben würdest - also z.B.:
Macro ZoomRotateDisplaySprite3DZOOM(Sprite, x, y, xx, w, h)
DUMMY = xx
ZoomSprite3D(Sprite, (DUMMY)*ZOOM, (DUMMY)*ZOOM)
RotateSprite3D(Sprite, (w)+90,0)
DisplaySprite3D(Sprite, (x)*ZOOM, (y)*ZOOM, h)
EndMacro
Generell tendiere ich persönlich allerdings dazu, solche mehrzeiligen Macros lieber in eine Procedur zu packen.
Macros benutze ich eigentlich nur für einzeilige Dinge wenn sie mir die Tipparbeit verkürzen (wenn sie z.B. eine komplexe Formel abbilden).
Weiterhin gestallte ich sie dann so, dass ich sie auch innerhalb einer Befehlszeile (also z.B. innerhalb eines Ausdrucks) verwenden kann. Ist aber wohl Geschmacksache.

Was Dein "Alt-Tab" Problem angeht, so ist wohl schon jeder Spieleprogrammierer mal auf dieses Problem gestoßen.
Lösen kannst Du es durch die richtige Anwendung von "IsScreenActive()".
Such hier im Forum einfach mal danach - dann solltest Du so einige Beiträge diesbezüglich finden.
([Edit] z.B. HIER bzw. HIER.)

Gruß, PL.
Zuletzt geändert von PureLust am 26.12.2007 01:26, insgesamt 3-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Bild
Du hast jetzt PureBasic 4.10? :o
Herzlichen Glückwunsch :allright:
Es gibt viele sehr viele neue Features/Befehle in PB 4.10.
Viel Spaß beim Programmieren mit PB 4.10 :allright:
Jetzt kannste ja endlich dein Bild wegschmeißen <)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

RSBasic hat geschrieben:Jetzt kannste ja endlich dein Bild wegschmeißen <)
Und du dein Beta 4 in der Signatur. :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Falo
Ups :mrgreen: Ich hab ja schon die vollendete Full-Version :mrgreen:
Wird sofort geändert :oops:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Ich besitze nun PB 4.10 - Habe jedoch gleich 2 Fragen

Beitrag von AND51 »

> Der Weihnachtsmann brachte mir PureBasic 4.10
Und du steigst nun endgültig und 100%ig auf 4.10 um??? :o

> Ist es nun besser viele Procedureren die nicht sehr groß sind als Marco zu schreiben
Ja! Macros dienen in erster Linie nur dazu, um Tipparbeit beim Coden zu sparen. Dennoch kann man auch Macros benutzen, um ganz bewusst Prozeduren zu ersetzen, denn Prozeduren sind immer ein Tick langsamer als Macros. Für Prozeduren muss z. B. immer erst zur Prozedur innerhalb des Codes hingesprungen werden, um dessen Inhalt auszuführen. (Quelle: PB Magazin Nr. 1/2006)
natürlich wird die EXE dabei größer, der Code wird ja schließlich überall dort eingesetzt, wo das Macro aufgerufen wird. Dafür gibt es aber absolut keinen Zeitverlust, weil ja eben nichts für eine Prozedur initialisert werden muss.

Um Prozeduren kommst du nur dann nicht herum, wenn du einen eigenen Speicherbereich brauchst, in dem etwas gerechnet werden soll und dann ein Ergebnis zurckgegeben werden muss (als beispiel fällt mir gerade meine byterechner()-Prozedur aus der Code-Tipp-Ecke ein).
Natürlich kann man meinen byterechner auch als Macro schreiben, aber dieses Macro kann nicht wie eine Prozedur ein einzelnes, knackiges Ergebnis zurückgeben.


> Schalte ich jedoch den ThreadSafeModus ein (den ich brauche) dann bekomme ich folgende Debuggermeldung wenn ich mit Alt-TAB rausgehe
ich arbeite zwar primär nicht mit Sprites etc. aber benutzt du auch IsScreenActive()? Du darfst nur zeichnen und flippen, solange der OpenScreen() den Fokus hat; geht der Benutzer raus, muss du IIRC alle Zeichenoperationen pausieren.

> Ich hoffe ihr könnt mir Helfen, damit 4.x langsam zur Primärsprache von mir wird...
Kein Problem, 2104 Benutzer stehen hinter dir^^
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

habe mal mein Problem mit dem Alt-TAB so verkleinert:

Code: Alles auswählen


InitSprite()
InitSprite3D()
InitKeyboard() 
InitMouse()

OpenScreen(xP, yP, 32, "")

Repeat

 FlipBuffers()
 If IsScreenActive()

  ClearScreen(0)

  Start3D()
 
  Stop3D()
 
  StartDrawing(ScreenOutput())
   DrawText(0,0,"Leer") 
  StopDrawing()
 
 EndIf

 ExamineKeyboard()
 If KeyboardPushed(#PB_Key_Escape) : End : EndIf

ForEver
Mit dieder Variante habe ich die Probleme die auftraten gößtenteils behoben, aber das Problem bei ThreadSafeModus bleibt.
Denn dort zeigt der Debugger bereits beim FlipBuffers() diesen ReadError an.
Nun kann ich hier schlecht alle meine Threads posten, abe ich kann euch sagen das dort KEINE MultiMedia befehlen enthalten sind.

Und das schlimme ist halt das die EXE abstürtzt wenn ich den Modus drinne lasse und mit AltTab wechsel
Und du steigst nun endgültig und 100%ig auf 4.10 um???
Natürlich NICHT ! aber ich versuche mich natürlich dort hin zu arbeiten, da 4.x sich weiter entwickelt ^^ 3.3 nicht
Zuletzt geändert von STARGÅTE am 26.12.2007 01:38, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

@AND51:
AND51 hat geschrieben:Du darfst nur zeichnen und flippen, solange der OpenScreen() den Fokus hat...
Genau das habe ich auch immer gedacht - und genau da lag mein Denkfehler.
Man darf nur ZEICHNEN wenn der Screen aktiv ist - FLIPPEN muss man jedoch IMMER.
(Siehe dazu u.A. die beiden bereits oben verlinkten Posts.)

[Edit:]
STARGÅTE hat geschrieben:... abe ich kann euch sagen das dort KEINE MultiMedia befehlen enthalten sind.
Was genau verstehst Du denn unter "MultiMedia"-Befehlen?
Du musst sämtliche Ausgaben auf den Screen unterbinden wenn er nicht aktiv ist - also auch Line(), Plot(), etc.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Antworten