Starthilfe zu GDI+ und Programmidee :)

  • Hallo,
    ich möchte ein kleines Spiel in AutoIt schreiben!
    Nur ich versuche es mir schon im Kopf vorzustellen.
    Ich hätte gern eine kleine GUI.
    Wo ein Männchen dann einfach rumhüpft.
    Also immer ein bisschen hoch und runter.
    Natürlich nicth über den Rand der GUI heraus (Das ist dann festgelegt, also die Größe wird nicht veränderbar sein).

    Nur ich komm logisch nicht dahinter, wie ich AutoIt sagen kann, das das Männchen hüpfen soll.
    Überhaupt die Figur kann ich nicht "darstellen".

    Ist hier jemand bereit, mir eine kleine Starthilfe zu geben?

    Danke schon vorab :)

  • Schau mal dieses Desktop Teddy Script an. Dort ist ein Beispiel, wie man eine Sprung-Animation erstellt.
    Bei Spieleentwicklung ist es sehr wichtig, dass man sehr gut in Rechnen usw. ist.

  • Ich würde für die Spieleentwicklung nicht AutoIt nehmen, sondern so etwas wie 3d game studio. Falls du C++ kannst, wird es eigentlich kein Problem für dich sein, lite-c zu lernen (lite-c ist die programmiersprache für diese entwicklungsumgebung). Fang aber nicht mit einem Multiplayer-spiel an, daran bin ich nämlich gescheitert :D

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Oh mein Gott.
    Bei UEZ Skript sieht das richtig schön schwer aus^^
    Hinter die Logik steig ich komischerweise nicht.
    Wie sagt man denn zum Beispiel seiner Figur, das die sich nach oben bewegen soll? :D

  • Oh mein Gott.
    Bei UEZ Skript sieht das richtig schön schwer aus^^
    Hinter die Logik steig ich komischerweise nicht.
    Wie sagt man denn zum Beispiel seiner Figur, das die sich nach oben bewegen soll? :D

    Ich würde mir Mario von eukalyptus anschauen! Dort sind die Jump 'n' Run Elemente implementiert, genau wie du willst ;)

    AUTOITEROIDS ist im Prinzip nicht sehr GDI+ lastig, denn es werden ja "nur" Striche gezogen! Schwerer war da das gesamte Handling des Spiels, wie Kollision (simple Version), Berechnungen, etc.

    Ansonsten würde ich mir die GDI+ Beispiele in den Foren anschauen und lernen, denn er gibt kein Tutorial dazu!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Erstmal danke für die Tipps!
    Hier ist mein erster "Erfolg":

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>

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

    #Region ### START Koda GUI section ###
    $GUI1 = GUICreate("Doodle Jump - Beta", 331, 512, 686, 205)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $pDoodle_Rechts = @ScriptDir&"\Doodle_Rechts.png"
    $pDoodle_Links = @ScriptDir&"\Doodle_Links.png"

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

    _GDIPlus_Startup()
    $Doodle_Rechts =_GDIPlus_ImageLoadFromFile ($pDoodle_Rechts)
    $Doodle_Links = _GDIPlus_ImageLoadFromFile ($pDoodle_Links)
    $Grafik = _GDIPlus_GraphicsCreateFromHWND ($GUI1)
    _GDIPlus_GraphicsDrawImage ($Grafik, $Doodle_Rechts, 50, 50)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Die Bilder sind im Anhang.

    So, jetzt ist der nächste Schritt, den "Doodle" zum springen zu bringen.
    Und zwar unendlich lang.
    Der soll einfach auf den "Boden" der GUI springen und wieder hoch.
    Aber so etwas wie:
    _GDIPlus_ImageMove()
    gibt es leider nicht.

    Kann mir jemand kurz helfen?
    Aus den Mario/Desktopteddybär und AutoIterioids bin ich was den Sprung angeht nicht sehr schlau geworden.

    EDIT:
    Ich habe jetzt einen Ansatz.
    Und zwar wird das Bild jetzt immer neu gezeichnet.
    Aber wie kann ich das alte Bild dann löschen?

    Einmal editiert, zuletzt von PokerFace (23. Januar 2010 um 16:23)

  • Hi,

    ich hab mal auf deiner Vorlage weitergemacht und das ist bis jetzt bei rausgekommen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    $Width = 300
    $Height = 460

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

    $JumpSpeed = 0.3
    $JumpHeight = 200 ;Pixel
    $MoveSpeed = 10

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

    $GUI1 = GUICreate("Doodle Jump - Gamma", $Width, $Height)
    GUISetState(@SW_SHOW)

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

    $pDoodle_Rechts = @ScriptDir&"\Doodle_Rechts.png"
    $pDoodle_Links = @ScriptDir&"\Doodle_Links.png"

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

    _GDIPlus_Startup()
    $Background = _GDIPlus_ImageLoadFromFile (@ScriptDir&"\background.jpg")

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

    $Doodle_Rechts =_GDIPlus_ImageLoadFromFile ($pDoodle_Rechts)
    $Doodle_Links = _GDIPlus_ImageLoadFromFile ($pDoodle_Links)
    $Doodle_Height = _GDIPlus_ImageGetHeight($Doodle_Rechts)
    $AktuellerDoodle = $Doodle_Rechts

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

    $Graphic = _GDIPlus_GraphicsCreateFromHWND($GUI1)
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic)
    $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)

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

    $i = 0
    $x = 50

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

    While 1
    If _IsPressed("25") Then
    $x -= $MoveSpeed
    $AktuellerDoodle = $Doodle_Links
    ElseIf _IsPressed("27") Then
    $x += $MoveSpeed
    $AktuellerDoodle = $Doodle_Rechts
    EndIf

    $i += $JumpSpeed
    $y = $Height - $Doodle_Height - 40 - Abs(Sin($i))*$JumpHeight

    ;~ _GDIPlus_GraphicsClear($Buffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsDrawImage ($Buffer, $Background, 0, 0)

    _GDIPlus_GraphicsDrawImage ($Buffer, $AktuellerDoodle, $x, $y)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width, $Height)
    Sleep(20)

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_ImageDispose($Buffer)
    _WinAPI_DeleteObject($Bitmap)

    Exit
    EndSwitch
    WEnd

    [/autoit]

    Mit den Pfeiltasten kann man schon rechts und links steuern. Und die Sprunghöhe etc. kann man auch recht einfach einstellen. Ich hab auch (aus Spaß, muss man nicht machen) ein Hintergrundbild dahintergemacht, das ihr im Anhang findet.
    Diese Version ist noch ziemlich CPU-lastig ... :whistling:
    Ich hoffe das kann dir helfen!

    mfg
    Ludwig