GDI+ Kometenschweif

  • Würd dir empfehlen beim Pong so ne Art Startbildschirm zu machen, da der Ball sonst manchmal etwas unerwartet kommt...
    Sowas wie: "Starten sie das Spiel mit "ENTER"

    edit: Oh, hätte ich auch direkt in Name22s Thread reinschreiben können...

    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"

  • Zitat

    irgendwie kann man auch die koordinaten zum abprallen mit -1 berechnen, aber kp wie?


    Hab ich vorhin versucht zu erklären.... :whistling:
    Du änderst das Vorzeichen einer Variable durch eine Multiplikation mit -1. ;)
    Also:

    [autoit]

    $Var *= -1

    [/autoit]


    ergibt praktisch eine umgekehrte Bewegungsrichtung...

  • Zitat

    wie baue ich das ein?


    Indem du nicht eine einzige Veriable für die Geschwindigkeit hast, sondern mehrere ;).
    Hier mal im PseudoCode

    [autoit]

    $iX = 50 ;X Koordinate
    $iY = 50 ;Y Koordinate
    $vX = 2 ;X Geschwindigkeit
    $vY = 3 ;Y Geschwindigkeit

    [/autoit]


    Und dann machst du bei jedem Schleifendurchgang (Frame) das hier:

    [autoit]

    $iX += $vX
    $iY += $vY

    [/autoit]


    Wenn du jetzt feststellst, dass der Ball eine bestimmte Grenze überschritten hat z.B. so:

    [autoit]

    If $iX >= 350 Then

    [/autoit]


    Führst du eine Multiplikation mit -1 durch.

    [autoit]

    $iX *= -1

    [/autoit]


    Ist doch nicht so schwer... :P

  • versuche das gleich umzusetzen!
    Edit:\\ so geht es irgendwie nicht...
    kannst du es komplett einbauen?bitte ;( ?

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.5.6 (beta)
    Author: Alizame

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

    Script Function:
    It make a kometenschweif

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    ;###
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Kometenschweif by Alizame", 800, 600)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    ;###

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

    $farbewei = 0xFFFFFFFF
    $farbeschwar = 0xFFFFFFFF
    $Ball = 40
    $iX = 50 ;X Koordinate
    $iY = 50 ;Y Koordinate
    $vX = 2 ;X Geschwindigkeit
    $vY = 3 ;Y Geschwindigkeit

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($Form1)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(800,600,$hGraphics)
    $Buffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $bWei = _GDIPlus_BrushCreateSolid($farbewei)
    $bSch = _GDIPlus_BrushCreateSolid($farbeschwar)
    $smooth = _GDIPlus_GraphicsSetSmoothingMode($hGraphics,2)
    _ReDraw ()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_ImageDispose($Buffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BrushDispose($bWei)
    _GDIPlus_BrushDispose($bSch)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndSwitch
    ;~ If _IsPressed("25") Then $iX -= $bewegung
    $iX += $vX
    $iY += $vY
    ;~ If _IsPressed("26") Then $iY -= $bewegung
    ;~ If _IsPressed("27") Then $iX += $bewegung
    ;~ If _IsPressed("28") Then $iY += $bewegung
    _ReDraw ()
    WEnd

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

    Func _ReDraw ()
    _PosCorrect ()
    _GDIPlus_GraphicsClear($Buffer,$bSch)
    _GDIPlus_GraphicsFillEllipse($Buffer,$iX,$iY,$Ball,$Ball,$bWei)
    _GDIPlus_GraphicsDrawImageRect($hGraphics,$hBitmap,0,0,800,600)
    $iXold = $iX
    $iYold = $iY
    EndFunc

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

    Func _PosCorrect()
    If $iX >= 350 Then $iX *= -1
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Alizame (12. Mai 2010 um 21:52)

  • habe jetzt mal eins mit abprallen (weiß nur noch nicht warum BG so grün ist?....)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstants.au3>

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

    Global $GUIWidth = 800 ;Breite GUI
    Global $GUIHeight = 600 ;Höhe GUI
    Global $BallWidth = 20 ;Breite Punkte
    Global $BallHeight = 20 ;Höhe Punkte
    Global $BallCount = 1 ;Anzahl Punkte
    Global $GUIColor = 0xFF00FF00 ;Farbe GUI
    Global $BallColor = 0xFFFFFFFF ;Farbe Punkte

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

    Global $Title = 1
    Global $iX[$BallCount]
    Global $iY[$BallCount]
    Global $StepX[$BallCount]
    Global $StepY[$BallCount]

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

    For $i = 0 To $BallCount - 1
    $iX[$i] = Random($BallWidth + 10, $GUIWidth - $BallWidth - 10)
    $iY[$i] = Random($BallHeight + 10, $GUIHeight - $BallHeight - 10)
    Do
    $StepX[$i] = Random(-5, 5, 1)
    $StepY[$i] = Random(-5, 5, 1)
    Until Not ($StepX[$i] = 0 And $StepY[$i] = 0)
    Next

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

    $hWnd = GUICreate("Punkteanzahl: " & $BallCount, $GUIWidth, $GUIHeight)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $hGraphic)
    Global $Buffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
    _GDIPlus_GraphicsClear($Buffer, $GUIColor)
    Global $hBrush = _GDIPlus_BrushCreateSolid($BallColor)
    $bSch = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)

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

    AdlibRegister("_Draw", 20)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    AdlibUnRegister()
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_BrushDispose($bSch)
    _GDIPlus_GraphicsDispose($Buffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndSwitch
    WEnd

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

    Func _Draw()
    _GDIPlus_GraphicsClear($Buffer, $bSch);$GUIColor)
    For $i = 0 To $BallCount - 1
    _GDIPlus_GraphicsFillEllipse($Buffer, $iX[$i], $iY[$i], $BallWidth, $BallHeight, $hBrush)
    $iX[$i] += $StepX[$i]
    $iY[$i] += $StepY[$i]
    If $iX[$i] >= ($GUIWidth - $BallWidth) Then $StepX[$i] = $StepX[$i] * - 1
    If $iY[$i] >= ($GUIWidth - $BallHeight) - 200 Then $StepY[$i] = $StepY[$i] * - 1
    If $iX[$i] <= 0 Then $StepX[$i] = $StepX[$i] * - 1
    If $iY[$i] <= 0 Then $StepY[$i] = $StepY[$i] * - 1
    Next
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $GUIWidth, $GUIHeight)
    EndFunc ;==>_Draw

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

    ist nen großer teil von name22 weil ich das einfach nicht gebacken gekriegt habe :D
    :thumbup: an name22
    ich hoffe das dasin ordnung ist!

    Einmal editiert, zuletzt von Alizame (13. Mai 2010 um 14:04)

  • Du musst einfach eine Farbe mit einem anderen Alpha Channel als FF verwenden z.B. 0xA0FF0000 für einen Rotton ;).
    Das ist auch der Grund wieso dein Script überhaupt so eine Art Kometenschweif produziert... Außerdem habe ich dir das schon vorhin gesagt... :huh: