• Ich hab in den Letzten Tagen einige Spiele durch Gespielt (dazu gehört DMC 5 und Dead Space 3) Bei beiden war jeweils der Abspann um die 10 min, bei Dead Space 3 nicht Jumpf bar (überspringbar)
    Da kahm mir die idee sowas in Autoit zu machen.

    Hat mich einige Haare gekostet, besonders das Flakern, dank Hilfe und dem Hinweiss ich solle es mit nem back Buffer machen, hats dan funktioniert.

    Beispiel.au3
    [autoit]


    #include <GuiConstants.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <GdiPlus.au3>
    #include 'GDI+ Game Abspann.au3'
    ;~
    OnAutoItExitRegister("_end")
    Global $width = 1000, $height = 500
    ;~
    _GDIPlus_Startup()
    ;~
    $hGui = GUICreate('Test', $width, $height, -1, -1)
    GUISetState(@SW_SHOW, $hGui)
    ;~
    _LastWord($hGui)
    ;~
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Stop
    Exit
    EndSwitch
    WEnd
    ;~
    Func _end()
    _GDIPlus_Shutdown()
    EndFunc ;==>_end

    [/autoit]
    GDI+ Abspann.au3
    [autoit]


    #include <file.au3>
    #include <Array.au3>
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _LastWord
    ; Beschreibung ..: Lässt die eingelessene Datei wie einen Abspann von Oben nach Unten Wandern
    ; Syntax ........: _LastWord($hGUI)
    ; Parameter .....: $hGUI - Das Handle zur HauptGUI
    ; Return values .: Erfolg - Lässt die eingelessene Datei wie einen Abspann von Oben nach Unten Wandern
    ; Fehler - 0: File 'Creator.txt' nicht gefunden
    ; -1: $UpDown und $DownUp enthalten beide True oder False
    ;
    ; Author ........: Skilkor
    ; Modified ......:
    ; Beispiel ......:
    ; ===============================================================================================================================
    Func _LastWord($hGUI)
    Local Const $Size = WinGetClientSize($hGUI) ;$Size[0] = Breite(X) des Fensters - $Size[1] = Höhe(Y) des Fensters
    Local $Progress = GUICtrlCreateProgress(0, $Size[1] - 20, $Size[0] - 60, 20) ;Erstellt eine Progressbar am Unteren Rand der Gui
    Global $Stop = GUICtrlCreateButton('Jump', $Size[0] - 60, $Size[1] - 20, 60, 20)
    Local $Creator = FileRead('Creator.txt') ;Liest die Datei 'Creator.txt' ein
    Local $Count[1] = [_FileCountLines(@ScriptDir & '\Creator.txt')] ;Gibt die menge an Zeilen von 'Creator.txt' zurück
    If $Creator = '' Then Return SetError(1, 0, 0) ;Wenn 'Creator.txt' nicht Existiert oder Leer ist
    Local $FontColor = 0xFFFFFAFA
    Local $fSize = 20 ;Grüssen Angabe zu _GDIPlus_FontCreate
    Local $bSize = $fSize * 3
    Local $iStyle = 0 ;Style Angabe zu _GDIPlus_FontCreate (0 - Normal | 1 - Fett | 2 - Kursiv | 4 - Unterstrichen | 8 - Durchgestrichen)
    Local $iUnit = 2 ;Unit Angabe zu _GDIPlus_FontCreate (0 - Weltkoordinaten, eine nichtphysikalische Einheit | 1 - Anzeigeeinheiten | 2 - Eine Einheit ist 1 Pixel
    ;;~ 3 - Eine Einheit ist 1 Punkt oder 1/72 Inch | 4 - Eine Einheit ist 1 Inch | 5 - Eine Einheit ist 1/300 Inch
    ;;~ 6 - Eine Einheit ist 1 Millimeter)
    Local $UpDown = False ;Wenn True, wird der Text von Oben nach Unter Dargestellt
    Local $DownUp = True ;Wenn True, Wird der Text von Untern nach Oben Dargestellt
    If $UpDown = True And $DownUp = True Then Return SetError(1, 0, -1)
    If $UpDown = False And $DownUp = False Then Return SetError(1, 0, -1)
    Local $Speed = 5 ;Die Geschwindigkeit des Durchlaufenden Textes
    Local $EndSleep = 3000 ;Die Wartezeit wie lange 'The End' in der Mitte stehenbleiben soll
    Local $Distance[1] = [0] ;Distanz Array
    Local $FamilyFont = 'Arial' ;Schrift Art (Kann je nach unterstützung von _GDIPlus_FontFamilyCreate beliebig geändert werden)
    ;;~
    For $d = 1 To $Count[0]
    _ArrayInsert($Distance, $d, $d * 1.2 * $fSize) ;|Erstellen des Distanz Array's
    Next
    ;;~
    $hStringFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hStringFormat, 1)
    $hBrush = _GDIPlus_BrushCreateSolid($FontColor)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hFamily = _GDIPlus_FontFamilyCreate($FamilyFont)
    $hFont = _GDIPlus_FontCreate($hFamily, $fSize, $iStyle, $iUnit)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Size[0], $Size[1] - 20, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    ;;~
    $bStringFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($bStringFormat, 1)
    $bBrush = _GDIPlus_BrushCreateSolid($FontColor)
    $bGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $bFamily = _GDIPlus_FontFamilyCreate($FamilyFont)
    $bFont = _GDIPlus_FontCreate($bFamily, $bSize, $iStyle, $iUnit)
    $bBitmap = _GDIPlus_BitmapCreateFromGraphics($Size[0], $Size[1] - 20, $bGraphic)
    $bBuffer = _GDIPlus_ImageGetGraphicsContext($bBitmap)
    ;;~
    For $i = 0 To $Size[1] + $Distance[$Count[0]]
    Switch GUIGetMsg()
    Case $Stop
    $i = $Size[1] + $Distance[$Count[0]]
    ExitLoop
    EndSwitch
    ;;~
    GUICtrlSetData($Progress, $i / ($Distance[$Count[0]] + $Size[1]) * 100)
    ;;~
    If $UpDown = True Then
    $tLayout = _GDIPlus_RectFCreate($Size[0] / 2 - 150, $i - $Distance[$Count[0]] + $Size[1], 300, $Distance[$Count[0]])
    ElseIf $DownUp = True Then
    $tLayout = _GDIPlus_RectFCreate($Size[0] / 2 - 150, $Size[1] - $i, 300, $Distance[$Count[0]])
    EndIf
    _GDIPlus_GraphicsClear($hBuffer)
    _GDIPlus_GraphicsDrawStringEx($hBuffer, $Creator, $hFont, $tLayout, $hStringFormat, $hBrush)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $Size[0], $Size[1] - 20)
    Sleep($Speed)
    Next
    For $i = 0 To $Size[1] + $Distance[$Count[0]]
    Switch GUIGetMsg()
    Case $Stop
    GUICtrlSetData($Stop, 'Exit')
    ExitLoop
    EndSwitch
    ;;~
    GUICtrlSetData($Progress, $i / ($Distance[$Count[0]] + $Size[1]) * 100)
    ;;~
    If $UpDown = True Then
    $tLayout = _GDIPlus_RectFCreate($Size[0] / 2 - 150, $i - $Distance[$Count[0]] + $Size[1], 300, $Distance[$Count[0]])
    ElseIf $DownUp = True Then
    $tLayout = _GDIPlus_RectFCreate($Size[0] / 2 - 150, $Size[1] - $i, 300, $Distance[$Count[0]])
    EndIf
    If $i = $Size[1] / 2 Then Sleep($EndSleep)
    _GDIPlus_GraphicsClear($bBuffer)
    _GDIPlus_GraphicsDrawStringEx($bBuffer, 'The End', $bFont, $tLayout, $bStringFormat, $bBrush)
    _GDIPlus_GraphicsDrawImageRect($bGraphic, $bBitmap, 0, 0, $Size[0], $Size[1] - 20)
    Sleep($Speed)
    Next
    EndFunc ;==>_LastWord

    [/autoit]
    Creator.txt
    [autoit]


    Adam
    Adelbert
    Adelmus
    Adolf
    Adolph
    Adolphe
    Adriaen
    Adrian
    Adrien
    Alain
    Albain
    Alberich
    Albert
    Albin
    Albrecht
    Aldo
    Alex
    Alexander
    Alexandre
    Alf
    Alfons
    Alfred
    Alistair
    Alister
    Alois
    Aloïs
    Aloys
    Alphons
    Alphonse
    Alvin
    Amadeus
    Ambroise
    Ambrosius
    Amédé
    Amédée
    Amos
    Anastasius
    Ancel
    Andi
    André
    Andreas
    Andres
    Andrés
    Andy
    Ansgar
    Anthony
    Antoine
    Anton

    [/autoit]


    (Sämmtliche Namen sind aus einer Namensliste aus dem Netz (Nur Vorname))
    Zu beachten gibt es eigentlich nur eines.
    Die Liste läuft von oben nach Unten, was zur auswirkung hat, das dass eingelessene File Recursiv dargestellt wird (Letzter Name als Erstes)
    Ich werde die Tage evt noch Optionen hinzufügen um Einzustellen ob es von Oben nach Unter läuft, und die Auslesung der Datei im Sinne der Bewegung von A -> B Stimmt.
    Man darf es weiter verfeinern, mir aber bittezuvor ne Nachricht Senden.

    Das ganze Sieht dan etwa so aus:


    Ich hab das ganze versucht so einfach wie möglich zu gestallten.
    Man muss keine Fenster(Gui) Coords mitgeben, lediglich #include und bei
    _LastWord($hGui) 
    das Fenster(Gui) Handle weitergeben.
    Die Fenster(Gui) Coords weden dan über das Handle mit WinGetClientSize($hGUI) ermittelt.

    Die Datei 'Creator.txt' Ist von nöten (Einfach erstellen)
    Sie beinhaltet den ganzen Text der Wiedergegeben wird.

    Fehler und Co bitte melden, hoffe aber, dass sie Soweit eigentlich macht was sie sollte :D

    Greez
    Skilkor


    *** Update 13.02.2013 22:50***
    Einstellungs Möglichkeit (Text von Oben nach Unten oder Unten nach Oben) Hinzugefügt (Zeile 28 / 29) und Entrpechende Return Error gesetzt
    *** Update 14.02.2013 00:30***
    Jump (Skip) & Exit Funktion hinzugefügt
    'The End' wird in 3facher Grösse von $fSize nach dem Abspann Wiedergegeben, dazu kann man auf Zeile 34 den Wert von $EndSleep die Dauer angeben wie lange 'The End' in der Mitte Stehen bleibt (in ms)
    *** Update 14.02.2013 14:00***
    Progressbar Stimmt nun mit der Wiedergabe des Textes überein

  • Es scheint alles ganz gut zu funktionieren. Nettes Script ;). Ich denke das mangelnde Interesse an deinem Script rührt zum einen von den begrezten Anwendungsmöglichkeiten und zum anderen haben die meisten kleinen AutoIt Spiele u.Ä. die bis jetzt entwickelt wurden meist nicht mehr als 1 Teammitglied.
    In meinem Fall sähe das Ganze also recht eintönig aus (siehe Anhang).

  • mhm, als einzel Person ises wirklich etwas Eintönig ^^

    Sieht aba trotzdem gut aus :D
    Zitat

    Ich denke das mangelnde Interesse an deinem Script rührt zum einen von den begrezten Anwendungsmöglichkeiten


    Naja, wie gesagt, ich hab es so einfach wie möglich für den Benutzer gemacht.
    Das Schränkt das ganze halt ein :S

    Aber ansonnsten lassen sicht "Text farbe" | "Text Geschwindigkeit" | "Text Grösse" | "Abspann Jump" | "Text Font" Einstellen, halt so Grundfunktionen um es einfach zu halten ^^