99 Seconds

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
Moskito
Beiträge: 182
Registriert: 18.01.2006 23:01
Kontaktdaten:

Beitrag von Moskito »

Hallo

Nochmal was zum DirectX9 Subsystem. Ich habe das gestern noch etwas genauer getestet.
Die Programminterne FPS Anzeige fällt auf bis zu 40 Frames mit dem Subsystem. Mit den
(ist es DX7?) vorherigen Einstellungen bleibt es bei 60, wie gewünscht. Unter XP sieht
der Rahmen des Fensters in beiden Fällen gleich aus. Ich muss gestehen, ich kenne mich
mit diesem ganzen "Klickibunti" Kram auch nicht so aus. Könnte mich da jemand vielleicht
mal aufklären? (Und was hat das mit dem XP Skin Support auf sich?)

Ich möchte eigentlich nicht unterschiedlich compilierte Programme im Archiv haben.


Vielen Dank schonmal im Vorraus

Thomas
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ohne Subsystem isses DX7.
DX9 is meines wissens bei manchen Befehlen langsamer... (Weis grad nich bei welchen)
XP Skin Support is nur für Windows wichtig, dann werden die Gadgets etc. eben mit dem XP-Skin und nich im Klassischen Win98 Stil angezeigt...
(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

DX9 ist vor allem bei UseBuffer() und StartDrawing(ScreenOutput()) langsamer.

hier liegt es also möglicher weise an der Textausgabe.

Eine Umstellung auf eine SpriteFont würde da wahrscheinlich Abhilfe schaffen.
das ist ja aber grundsätzlich sowieso schöner für solche Games...


aber zu viele sorgen würde ich mir da nicht machen, eine FpS von 40 ist doch ausreichend.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Moskito
Beiträge: 182
Registriert: 18.01.2006 23:01
Kontaktdaten:

Beitrag von Moskito »

*Kopfkratz*
Nur damit ich das nun richtig verstehe:

>Schön wäre es nur wenn du das DirectX9 Subsystem verwendest,
>da viele es hassen ... den Klassik Skin bekommen.

So wie ich das nun verstehe, würde es doch ausreichen in den Compileroptions den
XP Skin Support zu aktivieren. Dafür muss doch nicht das DX9 Subsystem bemüht werden.
Damit würde der Rahmen des Fensters doch auf jedem System so dargestellt wie gewünscht,
oder doch nicht?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du verstehst das schon richtig.
der XP-Skin Support hat nix mit DX z tun.

ABER

auf Vista schaltet sich Aero automatisch ab, wenn man ein Fenster mit DX7-Inhalt öffnet.
( Wixta, Ähro ... boah klingt das alles (G))


da die meisten User kaum in der Lage sind, die Unfähigkeit ihres Betriebssystems zu begreifen,
und schlicht dem Anwendungsprogrammierer die Schuld geben,
solltest du wohl einfach beides aktivieren, DX9 und XP-Skin.


btw...
mit XP-Skin-Support wird eine komplett andere Lib für die Fensterdarstellung und auch einiges vom Handling verwendet,
es ergeben sich also teilweise auch merkbare Unterschiede in der Funktionalität.

Am besten grundsätzlich XP-Skin Support einschalten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Moskito
Beiträge: 182
Registriert: 18.01.2006 23:01
Kontaktdaten:

Beitrag von Moskito »

Danke dir, Kaeru

Dann wird es eben eine Variante > XP geben und eine mit DX9 Subsystem. ;)
(Auch kein wirkliches Problem.)
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

ts-soft hat geschrieben:
Kurzer hat geschrieben: Das hätte Fred vielleicht besser mit einer Combobox lösen können, die schon mit den richtigen Einträgen gefüllt wird.
combobox mit multiselect :freak:
Öch söö, man kann mehrere angeben. :roll: :lol:
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kurzer hat geschrieben:Öch söö, man kann mehrere angeben. :roll: :lol:
Man kann sogar eigene erstellen :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Moskito
Beiträge: 182
Registriert: 18.01.2006 23:01
Kontaktdaten:

Beitrag von Moskito »

Und nochmal Windowed-Screen:

Irgendwie muss da bei PB oder dem Compiler doch der Wurm drin stecken.

Ich weiss ja nicht wieviele gestern die beiden Test-compiles ausprobiert haben, die X360
auf Windows 7 erfolgreich laufen hatte. Da ich hier nur auf XP und SE testen kann habe
ich bei den nun eintrudelnden Fehlermeldungen aus anderen Bereichen keine Möglichkeiten
dem Fehler auf die Schliche zu kommen. Hier läuft nämlich jedes der 3 compiles auf beiden
Systemen problemlos. Selbst mit XP Skin support und DX9 Subsystem auf 98SE.

Es kann doch nicht daran liegen, nur weil ein windowed-screen geöffnet wird, das einige
PCs dadurch abstürzen. Ich kann hier (ohne das programm zu beenden) ständig von windowed
zu DX-Screen wechseln ohne mucken. Hat jemand eine Idee oder ähnliches erlebt?
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag von sibru »

Hallo,

hier mal ´n kleiner Code, mit dem die Steine durchnummeriert werden
können... Auch als Basis anderer SeinLayout-Manipulationen zu benutzten
In der vorliegenden Form wird dieses SteinLayout generiert:

Bild

Neben besserer Unterscheidbarkeit ist nun auch die Meldung "Joker wg.
99 Steine der Farbe x" verdeutlicht... Und es ist eben als Basis eigener
Manipulationen zu gebrauchen:
(muss im SubDir ....\99Seconds\Graphics gestartet werden!!!
Orginal-Layout bleibt als "Blicks1.BMP.BAK" erhalten)

Code: Alles auswählen

#Prg_Name = "99SecStones"
#Prg_Vers = "9604a"            ;<-- set by PB_VersUpd Vers 9301a
#PB_Vers  = "4.30"


#Size     = 48       ;SteinGröße [Pixels]
#Steine   = 29       ;Anz. definierter Steine
#FontSize = 16       ;Schriftgröße
#FontName = "VAGRounded BT"  ;Schriftart
#WhiteStones = " 14 19 23 28 29 13 4 "  ;Nr´s der dunklen Steine (bekommen weisse Schrift)

#Mode     = 0


 ; XIncludeFile "C:\AlsterSoft\PB4.20\Module\FileBackup.PBI"
 ; XIncludeFile "C:\AlsterSoft\PB4.20\Module\ImageTransparenz.PBI"
 ; XIncludeFile "C:\AlsterSoft\PB4.20\Module\Win_Upd.PBI"


Procedure DrawTextOutline(DC, x, y, Text$, FontID, Farbe)
  Protected oldspacing = GetTextCharacterExtra_(DC)
  Protected Text = @Text$
  Protected Lang = Len(Text$)
  Protected Brush = CreateSolidBrush_(Farbe)
  SelectObject_(DC, FontID)
  SetTextCharacterExtra_(DC, 2)  ;Zeichen-Abstand
  SetBkMode_(DC, #TRANSPARENT)
  SetTextAlign_(DC, #TA_NOUPDATECP)
  BeginPath_(DC)
  TextOut_(DC, x, y, Text, Lang)
  EndPath_(DC)
  SelectObject_(DC, Brush)
  StrokeAndFillPath_(DC)
  DeleteObject_(Brush)
  SetTextCharacterExtra_(DC, oldspacing)
EndProcedure

 ;- Init´s
ImgFile$ = "Blocks1.bmp"
BaseImgID = LoadImage(0, ImgFile$)
 ; Win_MinB=500
 ; Win_MinT=180
 ; Win_Upd(1) ;get WinPos & -Size(last Session)
Win_X = 10 : Win_Y = 10 : Win_B = 500 : Win_T = 180
WinNr = 1
WinID = OpenWindow(WinNr, Win_X, Win_Y, Win_B, Win_T, "Steine 99Sec´s", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
;CreateGadgetList(WinID) <-- updated by PB_SrcUpd Vers. 9303b
UseGadgetList(WinID)
ImageGadget(1, 0, 0, ImageWidth(0), ImageHeight(0), BaseImgID)
FontID = LoadFont(1, #FontName, #FontSize, #PB_Font_Bold)


 ;- erstmal die Ziffern-Bildchen aufbauen
For Stein = 1 To #Steine
  Stein$ = Str(Stein)  ;Stein-Beschriftung
  CreateImage(Stein, #Size, #Size)
  DC = StartDrawing(ImageOutput(Stein))
  Box(0, 0, #Size, #Size, #White)  ;Schrift-Hintergrund einweissen
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID)
  xPos = (#Size - TextWidth(Stein$)) / 2  ;Schrift horizontal mittig auf´n Stein
  yPos = (#Size - TextHeight(Stein$)) / 2 - 2  ;auch vertikal
  DrawTextOutline(DC, xPos , yPos, Stein$, FontID, #White)  ;Schrift nur als Zeichen-Umrahmung
   ;DrawText(xPos ,yPos,Stein$,#Black,#White) ;volle Schrift
  StopDrawing()
  StartDrawing(WindowOutput(WinNr))
  DrawImage(ImageID(Stein), x, y)
  x + #Size  ;Position-Pointer auf nächsten Stein setzen
  If x>#Size * 9
    x = 0
    y + #Size
  EndIf
Next

 ; Repeat
   ; Event = WaitWindowEvent()
 ; Until Event = #PB_Event_CloseWindow

 ;- Ziffern-Bildchen in´s HauptBild einschmelzen
x = 0 : y = 0  ;Position-Pointer reseten
StartDrawing(ImageOutput(0))
For Stein = 1 To #Steine
  Stein$ = " " + Str(Stein) + " "  ;für Suche in #WhiteStones
  For x2 = 1 To #Size      ;aktuellen Stein Pixelweise durchgehen:
    For y2 = 1 To #Size
      StartDrawing(ImageOutput(Stein))
      Farbe = Point(x2 , y2)  ;Schrift-Farbe holen
      StopDrawing()
      If Farbe = #Black  ;nur schwarze Ziffern-Pixels umsetzen
        StartDrawing(ImageOutput(0))
        Farbe = Point(x + x2 , y + y2)  ;Farbe Pixel HauptBild holen
        Select #Mode
          Case 1
            r = 255 - Red(Farbe)
            g = 255 - Green(Farbe)
            b = 255 - Blue(Farbe)
            Farbe = RGB(r, g, b)
          Case 2
            r = Red(Farbe) - 128 : If r<0 : r + 255 : EndIf
            g = Red(Farbe) - 128 : If g<0 : g + 255 : EndIf
            b = Red(Farbe) - 128 : If b<0 : b + 255 : EndIf
            Farbe = RGB(r, g, b)
          Case 3
             ;Farbe = ImageTransparenz(Farbe, #Black)
          Default
            If FindString(#WhiteStones, Stein$, 1)
              Farbe = #White
            Else
              Farbe = #Black
            EndIf
        EndSelect
        Plot(x + x2, y + y2, Farbe)
        StopDrawing()
      EndIf
    Next
  Next

  BaseImgID = ImageID(0)
  SetGadgetState(1, BaseImgID)  ;aktuellen Stein darstellen
  x + #Size  ;Position-Pointer auf nächsten Stein setzen
  If x>#Size * 9
    x = 0
    y + #Size
  EndIf
Next
RenameFile(ImgFile$, ImgFile$ + ".BAK")  ;Sicherheits-Kopie aufbauen
SaveImage(0, ImgFile$)

Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
 ;Win_Upd(9) ;store WinPos & -Size
; updated durch Prg. PB_SrcUpd Vers. 9303b am 07.06.2009, 13:49h
Gruss SiBru
Bild Bild
Antworten