Character Editor

  • Hallo zusammen, ich bin derzeit dabei einen Character Editor zu basteln und wollte mal fragen bb Ihr mir vll. helfen könnt ...ich habe schon mit unserem pinken chesstiger geschrieben, er hat mir auch ein kleines Script als Antwort geschickt, (sei mir net bös chess) ich dreh mich immernoch im Kreise 8|

    Es geht darum, dass ich wenn ich einen der zwei RadioButtons anklicke zunächst das Bild 1 des jeweiligen Geschlechts der jeweiligen Kategorie (hier nur eine aus testzwecken) gezeichnet wird. Dann kann man mit den weiter/zurück Button alle Bilder die in der Kategorie unter dem ausgewählten Geschlecht sind durchklicken ... Mein problem, ich weiss nicht, wie ich das von mir erstelle Array sinnvoll nutzen kann um an die $hImages zu kommen ... ich bräuchte meiner Meinung nach eine Funktion die im 2D Array die Spalten durchläuft und mir alles was sie gefunden hat zurück gibt.

    Ich habe schon mit dem _ArraySearch sowie _Array2DSearch rumgespielt aber komme zu keinem Ziel. Kann mir jemand von euch sagen wie ich das Array mit den Radio Buttons sowie den weiter/zurück Buttons verknüpfen kann?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    ;Creating Pictures (bottom -> top): neck, face (edit), nose, mouth, ears, eyebrows, beard, eyes, tattoo, kemono, hair, glasses

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("_exit")
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg

    [/autoit] [autoit][/autoit] [autoit]

    ;Rectangle Positions
    Global $aPos[1][2]
    $aPos[0][0] = 10
    $aPos[0][1] = 63

    [/autoit] [autoit][/autoit] [autoit]

    ;Image/Sex/Slot
    Global $aHimages[4][3] = [[_GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\1.png"), "female", "neck"], _
    [_GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\2.png"), "female", "neck"], _
    [_GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\2.png"), "male", "neck"], _
    [_GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\2.png"), "male", "neck"]]

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("RPG - Character Editor", 200, 200)
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    ;Sex
    Global $hLabel_sex = GUICtrlCreateLabel("Geschlecht: ", 10, 10, 50, 20)
    Global $hRadio_female = GUICtrlCreateRadio("weiblich", 75, 6)
    Global $hRadio_male = GUICtrlCreateRadio("männlich", 140, 6)

    [/autoit] [autoit][/autoit] [autoit]

    ;Neck
    Global $hLabel_neck = GUICtrlCreateLabel("Hals", 10, 50, 96, 20)
    _GDIPlus_GraphicsDrawRect($hGraphic, 10, 63, 96, 96)
    Global $hBtn_neckl = GUICtrlCreateButton("<<", 10, 164, 30, 20)
    Global $hLabel_necknr = GUICtrlCreateLabel("", 325, 166, 10, 20)
    Global $hBtn_neckr = GUICtrlCreateButton(">>", 80, 164, 30, 20)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $hRadio_female
    _draw_defaults("female")
    Case $hRadio_male
    _draw_defaults("male")
    Case $hBtn_neckl

    [/autoit] [autoit][/autoit] [autoit]

    Case $hBtn_neckr

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    _exit()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _draw_defaults($sSex)
    Local $aSlots[12] = ["neck", "face", "nose", "mouth", "ears", "eyebrows", "beard", "eyes", "tattoo", "kemono", "hair", "glasses"]
    For $i = 0 To UBound($aHimages) - 1 Step 1
    If $aHimages[$i][1] = $sSex Then
    If $aHimages[$i][2] = $aSlots[0] Then
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$i][0], $aPos[0][0], $aPos[0][1], 96, 96)
    EndIf
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_exit

    [/autoit]


    Die Funktion _draw_defaults() funktioniert scheinbar auch noch nicht 100%ig hab ich das Gefühl ... also mein Gedankengang in den Arrays ist folgender:

    Bei klick auf einen Radio Button: suche im Array nach male/female, suche nach der kategorie "neck", suche das image des bildes 1, zeichne das.
    Wenn nun im Array aber 5 Bilder der Kategorie "neck" unter female sind, soll man dann wenn ich auf die Buttons unter dem kleinen Fenster drücke diese durchgehen können. Das heisst ich muss ein Temporäres Array schreiben, in dem alle Bilder der kategorie female-neck stehen reingeschrieben werden und dann einfach mit einem zähler der hochzählt beim klicken und wenn am letzten Element angekommen, dann setze den einfach auf Anfang. Nur schaffe ich es derzeit nicht sowas umzusetzen :/

    Grüße

    #Edit: Anhang mit den Bildern und der Ordnerstruktur hinzugefügt.
    #Edit2: Da ich am Script arbeite editiere ich Immer nur den Spoiler!!

    Grüße Yaerox

    Grüne Hölle

    4 Mal editiert, zuletzt von Yaerox (4. Februar 2013 um 09:08)

    • Offizieller Beitrag

    Gestalte dein Array sinnvoller:

    [autoit]

    Global Enum $FEMALE = 1, $MALE

    [/autoit][autoit][/autoit][autoit]

    Global $aHimages[2][3] = [_
    ['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\1.png")], _
    ['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\2.png")]]

    [/autoit][autoit][/autoit][autoit]

    ; == weibliche Images sind jetzt immer zu finden an $aHimages[n][$FEMALE] und die männlichen Gegenstücke an $aHimages[n][$MALE]

    [/autoit][autoit][/autoit][autoit]

    ; == so sieht dann die Draw-Funktion aus:
    Func _draw_defaults($iSex)
    ; Local $aSlots[12] = ["neck", "face", "nose", "mouth", "ears", "eyebrows", "beard", "eyes", "tattoo", "kemono", "hair", "glasses"]
    For $i = 0 To UBound($aHimages) - 1
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$i][$iSex], $aPos[0][0], $aPos[0][1], 96, 96)
    Next
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    ; == Welchen Sinn sollte diese Abfrage haben?
    If $aHimages[$i][2] = $aSlots[0] Then..
    ; == ist doch kpl. überflüssig, da du nicht in Abhängigkeit von dem Array-Slots agierst.

    [/autoit][autoit][/autoit][autoit][/autoit]


    Deine Case-Abfrage zu den Radios sollte so aussehen:

    [autoit]

    Case $hRadio_female, $hRadio_male
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then
    _draw_defaults($FEMALE)
    Else
    _draw_defaults($MALE)
    EndIf

    [/autoit]
  • Ja um auf letztere von dir angesprochene Abfrage - es ist überflüssig ...

    Kannst du mir vll. noch einen Gedanklichen Anstoß geben, wie ich es wohl nun hinkriege, dass wenn ich die Buttons unter dem Fenster (vor/zurück-Buttons) klicke ich nun am einfachsten ermitteln kann welche Bilder er anzeigen soll?
    Meine Gedanken dazu sind: Prüfe welcher RadioButton für das geschlecht ausgewählt ist, dann bräuchte ich ja eine Liste an Bildern (hier im Test sind es ja nur 2) "necks", die er dann nacheinander durchgeht...

    Derzeit sieht die Funktion bei mir wie folgt aus:

    [autoit]

    Func _draw_images($sDirection)
    $z = GUICtrlRead($hLabel_necknr) + 1
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then
    If $z < UBound($aHimages) - 1 Or $z = UBound($aHimages) - 1 Then
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$z-1][$FEMALE], $aPos[0][0], $aPos[0][1], 96, 96)
    Else
    $z = 1
    EndIf
    Else
    If $z < UBound($aHimages) - 1 Or $z = UBound($aHimages) - 1 Then
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$z-1][$MALE], $aPos[0][0], $aPos[0][1], 96, 96)
    Else
    $z = 1
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Also ich kann von Bild 1 auf Bild 2 wechseln nur zurück geht noch nicht - (davon steht auch noch nichts im Code)

    Wobei ich grad überlege die Labelanzeige wegzulassen :/

    Grüße Yaerox

    Grüne Hölle

  • Ich habe dir doch per PN ein Beispiel geschickt, nicht?
    Da ist eine While-Schleife zum durchgehen des Arrays drinne.
    Diese erledigt das in steigender Reihenfolge, sagen wir der einfachheit halber mal 'Richtung Links'.
    So, und wenn du diese Schleife jetzt auch noch mal für fallende Reihenfolge umschreibst ('Richtung Rechts'), dann hast du doch das, was du willst?

    chess

    • Offizieller Beitrag

    Also ich kann von Bild 1 auf Bild 2 wechseln nur zurück geht noch nicht - (davon steht auch noch nichts im Code)


    Du machst es zu kompliziert:

    [autoit]

    Func _draw_images($iDirection) ; == nicht $sDirection sondern $iDirection verwenden ("1" für nächstes oder "-1" für voriges, Start ist bei "0")
    Local $iSex = $MALE
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then $iSex = $FEMALE
    Local Static $currIndex = 0 ; == speichert die Position im Array
    If ($iDirection = 1 And $currIndex = UBound($aHimages)) Or _
    ($iDirection = -1 And $currIndex = 0) Then $iDirection = 0
    $currIndex += ($iDirection)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$currIndex][$iSex], $aPos[0][0], $aPos[0][1], 96, 96)
    EndFunc

    [/autoit]
  • Sooo ^^ Langsam kann ich wieder anfangen zu grinsen *g*

    Also: habe die Schleife von dir genommen chess und umgebaut:

    [autoit]


    Func _draw_images()
    $sCategory = "neck"
    If GUICtrlRead($hRadio_female) = $GUI_CHECKED Then
    $sGender = $FEMALE
    Else
    $sGender = $MALE
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If Not IsDeclared("counter") Then
    Global $counter = 0
    EndIf
    While True
    If $aHimages[$counter][0] = $sCategory Then
    $sChange = $aHimages[$counter][$sGender]
    $counter += 1
    ExitLoop
    EndIf
    $counter += 1
    If $counter >= (UBound($aHimages) - 1) Then $counter = 0
    WEnd
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $sChange, $aPos[0][0], $aPos[0][1], 96, 96)
    EndFunc

    [/autoit]

    Funktioniert auch, jetzt muss ich nurnoch die Begrenzung angucken, die funzt noch net ganz...der Zeigt mir derzeit Bild 1, Bild 2, Bild 1, error ^^

    Unsere Posts haben sich überschnitten, schaue mir das sofort von dir an BugFix...

    Grüße Yaerox

    Grüne Hölle

  • BugFix : Habe diese zwei zeilen 'korrigiert', der ist bei der Variante nächstes Bild sonst über das Array hinaus gegangen, da hab ich + $iDirection hinzugefügt.

    [autoit]


    If ($iDirection = 1 And $currIndex + $iDirection = UBound($aHimages)) Or _
    ($iDirection = -1 And $currIndex = 0) Then $iDirection = 0

    [/autoit]

    Ja so klappt das richtig gut. Dann mache ich jetzt einfach für Jede kategorie ein Array oder glaubt ihr es sei noch Möglich nun diverse kategorien in dieses eine Array hinzuzufügen?

    Grüße Yaerox

    Grüne Hölle

  • Mit ebene meinst du eine Spalte nehme ich an? Oder eine Dimension? Wenn nur eine Spalte, wieso kann ich denn dann nicht die erste nehmen ... diese wird doch momentan garnicht genutzt oder nicht?

    z.B.

    [autoit]


    Global $aHimages[4][3] = [['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\1.png")], _
    ['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\2.png")], _
    ['face', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\face\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\face\1.png")], _
    ['face', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\face\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\face\2.png")]]

    [/autoit]


    ... ich versuch grad ob ich das damit auch irgendwie hin kriege ... hier habe ich jetzt allerdings auch zwei dieser Kästchen ...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    ;Creating Pictures (bottom -> top): neck, face (edit), nose, mouth, ears, eyebrows, beard, eyes, tattoo, kemono, hair, glasses

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("_exit")
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg

    [/autoit] [autoit][/autoit] [autoit]

    ;Rectangle Positions
    Global $aPos[2][2]
    $aPos[0][0] = 10
    $aPos[0][1] = 63
    $aPos[1][0] = 130
    $aPos[1][1] = 63

    [/autoit] [autoit][/autoit] [autoit]

    Global Enum $FEMALE = 1, $MALE
    Global Const $iImagespercategory = 2

    [/autoit] [autoit][/autoit] [autoit]

    Global $aHimages[4][3] = [['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\1.png")], _
    ['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\2.png")], _
    ['face', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\face\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\face\1.png")], _
    ['face', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\face\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\face\2.png")]]

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("RPG - Character Editor", 350, 200)
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    ;Sex
    Global $hLabel_sex = GUICtrlCreateLabel("Geschlecht: ", 10, 10, 50, 20)
    Global $hRadio_female = GUICtrlCreateRadio("weiblich", 75, 6)
    Global $hRadio_male = GUICtrlCreateRadio("männlich", 140, 6)

    [/autoit] [autoit][/autoit] [autoit]

    ;Neck
    Global $hLabel_neck = GUICtrlCreateLabel("Hals", 10, 50, 96, 20)
    _GDIPlus_GraphicsDrawRect($hGraphic, 10, 63, 96, 96)
    Global $hBtn_neckl = GUICtrlCreateButton("<<", 10, 164, 30, 20)
    Global $hBtn_neckr = GUICtrlCreateButton(">>", 80, 164, 30, 20)

    [/autoit] [autoit][/autoit] [autoit]

    ;Face
    Global $hLabel_face = GUICtrlCreateLabel("gesicht", 130, 50, 96, 20)
    _GDIPlus_GraphicsDrawRect($hGraphic, 130, 63, 96, 96)
    Global $hBtn_facel = GUICtrlCreateButton("<<", 130, 164, 30, 20)
    Global $hBtn_facer = GUICtrlCreateButton(">>", 198, 164, 30, 20)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $hRadio_female, $hRadio_male
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then
    _draw_defaults($FEMALE)
    Else
    _draw_defaults($MALE)
    EndIf
    Case $hBtn_neckl
    _draw_images(-1)
    Case $hBtn_neckr
    _draw_images(1)
    Case $GUI_EVENT_CLOSE
    _exit()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _draw_defaults($iSex)
    For $i = 0 To UBound($aHimages) - 1 Step $iImagespercategory
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$i][$iSex], $aPos[0][0], $aPos[0][1], 96, 96)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _draw_images($iDirection) ; == nicht $sDirection sondern $iDirection verwenden ("1" für nächstes oder "-1" für voriges, Start ist bei "0")
    Local $iSex = $MALE
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then $iSex = $FEMALE
    Local Static $currIndex = 0 ; == speichert die Position im Array
    If ($iDirection = 1 And $currIndex + $iDirection = UBound($aHimages)) Or _
    ($iDirection = -1 And $currIndex = 0) Then $iDirection = 0
    $currIndex += ($iDirection)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$currIndex][$iSex], $aPos[0][0], $aPos[0][1], 96, 96)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ Func _draw_images()
    ;~ $sCategory = "neck"
    ;~ If GUICtrlRead($hRadio_female) = $GUI_CHECKED Then
    ;~ $sGender = $FEMALE
    ;~ Else
    ;~ $sGender = $MALE
    ;~ EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;~ If Not IsDeclared("counter") Then
    ;~ Global $counter = 0
    ;~ EndIf
    ;~ While True
    ;~ If $aHimages[$counter][0] = $sCategory Then
    ;~ $sChange = $aHimages[$counter][$sGender]
    ;~ $counter += 1
    ;~ ExitLoop
    ;~ EndIf
    ;~ $counter += 1
    ;~ If $counter >= (UBound($aHimages) - 1) Then $counter = 0
    ;~ WEnd
    ;~ _GDIPlus_GraphicsDrawImageRect($hGraphic, $sChange, $aPos[0][0], $aPos[0][1], 96, 96)
    ;~ EndFunc

    [/autoit]

    Grüße Yaerox

    Grüne Hölle

  • Hmm ... okay ... ja ich bin am schauen ob ich das irgendwie hinkriege ^^

    Uiuiui langsam tut sich was ^^

    [autoit]


    Global $aPos[2][3] = [["neck", 10, 63], _
    ["face", 130, 63]]
    .
    .
    .
    Func _draw_defaults($iSex)
    For $i = 0 To UBound($aHimages) - 1 Step $iImagespercategory
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$i][$iSex], $aPos[_ArraySearch($aPos, $aHimages[$i][0])][1],$aPos[_ArraySearch($aPos, $aHimages[$i][0])][2], 96, 96)
    Next
    EndFunc

    [/autoit]

    Grüße Yaerox

    Grüne Hölle

    2 Mal editiert, zuletzt von Yaerox (11. Januar 2013 um 15:03)

  • Darf ich mal erfragen ob das von mir in die richtige Richtung geht? ^^ Also die Art und weise meiner Anwendung der Spalte ^^

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    ;Creating Pictures (bottom -> top): neck, face (edit), nose, mouth, ears, eyebrows, beard, eyes, tattoo, kemono, hair, glasses

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("_exit")
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg

    [/autoit] [autoit][/autoit] [autoit]

    ;Rectangle Positions
    Global $aPos[2][3] = [["neck", 10, 63], _
    ["face", 130, 63]]

    [/autoit] [autoit][/autoit] [autoit]

    Global Enum $FEMALE = 1, $MALE
    Global Const $iImagespercategory = 2

    [/autoit] [autoit][/autoit] [autoit]

    Global $aHimages[4][3] = [['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\1.png")], _
    ['neck', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\neck\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\neck\2.png")], _
    ['face', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\face\1.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\face\1.png")], _
    ['face', _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\female\face\2.png"), _GDIPlus_ImageLoadFromFile(@ScriptDir & "\files\images\male\face\2.png")]]

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("RPG - Character Editor", 350, 200)
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    ;Sex
    Global $hLabel_sex = GUICtrlCreateLabel("Geschlecht: ", 10, 10, 50, 20)
    Global $hRadio_female = GUICtrlCreateRadio("weiblich", 75, 6)
    Global $hRadio_male = GUICtrlCreateRadio("männlich", 140, 6)

    [/autoit] [autoit][/autoit] [autoit]

    ;Neck
    Global $hLabel_neck = GUICtrlCreateLabel("Hals", 10, 50, 96, 20)
    _GDIPlus_GraphicsDrawRect($hGraphic, 10, 63, 96, 96)
    Global $hBtn_neckl = GUICtrlCreateButton("<<", 10, 164, 30, 20)
    Global $hBtn_neckr = GUICtrlCreateButton(">>", 80, 164, 30, 20)

    [/autoit] [autoit][/autoit] [autoit]

    ;Face
    Global $hLabel_face = GUICtrlCreateLabel("gesicht", 130, 50, 96, 20)
    _GDIPlus_GraphicsDrawRect($hGraphic, 130, 63, 96, 96)
    Global $hBtn_facel = GUICtrlCreateButton("<<", 130, 164, 30, 20)
    Global $hBtn_facer = GUICtrlCreateButton(">>", 198, 164, 30, 20)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $hRadio_female, $hRadio_male
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then
    _draw_defaults($FEMALE)
    Else
    _draw_defaults($MALE)
    EndIf
    Case $hBtn_neckl
    _draw_images(-1, "neck")
    Case $hBtn_neckr
    _draw_images(1, "neck")
    Case $hBtn_facel
    _draw_images(-1, "face")
    Case $hBtn_facer
    _draw_images(1, "face")
    Case $GUI_EVENT_CLOSE
    _exit()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _draw_defaults($iSex)
    For $i = 0 To UBound($aHimages) - 1 Step $iImagespercategory
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$i][$iSex], $aPos[_ArraySearch($aPos, $aHimages[$i][0])][1],$aPos[_ArraySearch($aPos, $aHimages[$i][0])][2], 96, 96)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _draw_images($iDirection, $sCategory) ; == nicht $sDirection sondern $iDirection verwenden ("1" für nächstes oder "-1" für voriges, Start ist bei "0")
    Local $iSex = $MALE
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then $iSex = $FEMALE
    Local Static $currIndex = 0 ; == speichert die Position im Array
    If ($iDirection = 1 And $currIndex + $iDirection = UBound($aHimages)) Or _
    ($iDirection = -1 And $currIndex = 0) Then $iDirection = 0
    $currIndex += ($iDirection)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$currIndex][$iSex], $aPos[_ArraySearch($aPos, $sCategory)][1],$aPos[_ArraySearch($aPos, $sCategory)][2], 96, 96)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    ... muss noch fixen, dass der für beide fenster alle bilder "zur verfügung" hat ...

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (11. Januar 2013 um 15:24)

  • Das _ArraySearch(..'Kategorie'..) war dafür gedacht, damit er weiss in welches der Fenster er das Bild malen soll ...
    Ich habe grad das Problem, dass derzeit die Funktion zum weiterschalten der Bilder Alle durchläuft, und ich dort quasi versuche Grenzen Einzustellen ... und versage xD

    probiere momentan etwas in die Richtung:

    Spoiler anzeigen
    [autoit]

    Func _draw_images($iDirection, $sCategory) ; == nicht $sDirection sondern $iDirection verwenden ("1" für nächstes oder "-1" für voriges, Start ist bei "0")
    ; == $sCategory -> ArrayElement an dem die Kategorie beginnt - 0 = "neck" ; 2 = "face"
    Local $iSex = $MALE
    If BitAND(GUICtrlRead($hRadio_female), $GUI_CHECKED) Then $iSex = $FEMALE
    Local Static $currIndex = $sCategory ; == speichert die Position im Array
    ConsoleWrite($currIndex & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    If ($iDirection = 1 And $currIndex + $iDirection = UBound($aHimages)) Then
    $iDirection = $sCategory
    ElseIf ($iDirection = -1 And $currIndex = $sCategory) Then
    $iDirection = $sCategory
    ElseIf ($currIndex + $iDirection > $currIndex + $iImagespercategory) Then
    $iDirection = $sCategory
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $currIndex += ($iDirection)
    ConsoleWrite("> " & $currIndex & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $aHimages[$currIndex][$iSex], $aHimages[$currIndex][3], $aHimages[$currIndex][4], 96, 96)
    EndFunc

    [/autoit]

    hmm...

    Grüße Yaerox

    Grüne Hölle

    2 Mal editiert, zuletzt von Yaerox (11. Januar 2013 um 16:20)