Seite 16 von 26

Verfasst: 06.06.2009 10:16
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

Verfasst: 06.06.2009 12:06
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...

Verfasst: 06.06.2009 12:15
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.

Verfasst: 06.06.2009 12:28
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?

Verfasst: 06.06.2009 12:49
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.

Verfasst: 06.06.2009 12:53
von Moskito
Danke dir, Kaeru

Dann wird es eben eine Variante > XP geben und eine mit DX9 Subsystem. ;)
(Auch kein wirkliches Problem.)

Verfasst: 06.06.2009 23:23
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:

Verfasst: 06.06.2009 23:38
von ts-soft
Kurzer hat geschrieben:Öch söö, man kann mehrere angeben. :roll: :lol:
Man kann sogar eigene erstellen :wink:

Verfasst: 07.06.2009 00:07
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?

Verfasst: 07.06.2009 14:02
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