_gdiplus und prospeed

  • will ein spiel programmieren wo man meteroiden abschiesen muss nur leider sieht man den explosionseffekt nicht.

    Spoiler anzeigen
    [autoit]

    ;#NoTrayIcon
    #include "prospeed30.au3"
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    ;(1400/2.5)/(2400/2.5))
    ;270000
    ;20385
    ;13905
    ;7560 -> 4725
    ;MsgBox(0,"",1179 - 1178*0.93)
    ;Exit
    $player1x = 100
    $player1y = 600
    $player2x = 200
    $player2y = 600
    $richtung_bild = -1
    $player1_bild = 0
    $player2_bild = 0
    $schuss1_x2 = 0
    $schuss1_y2 = 0
    $schuss2_x2 = 0
    $schuss2_y2 = 0
    $schussx1 = 0
    $schussy1 = 0
    $schussx2 = 0
    $schussy2 = 0
    $schuss1_1 = "frei"
    $schuss1_2 = "frei"
    $schuss1_1g = 10
    $schuss1_2g = 50
    $schuss2_1g = 10
    $schuss2_2g = 50
    $schuss1_y1 = 0
    $schuss1_x1 = 0
    $schuss2_y2 = 0
    $schuss2_x2 = 0
    $schuss4_y2 = 0
    $schusstimeout1 = 0

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

    ;******************************
    $schuss3_x1 = 0
    $schuss3_1 = "frei"
    $schuss4_1 = "frei"
    $schuss3_1 =0
    $schuss3_2 = 0
    $schuss3_y1 = 0
    $schuss3_x2 = 0
    $schuss3_y2 = 0
    $schuss4_x2 = -400
    $schuss4_y2 = -400
    $schussx3 = 0
    $schussy3 = 0
    $schussx4 = 0
    $schussy4 = 0
    $schuss3_1g = 10
    $schuss3_2g = 50
    $schuss4_1g = 10
    $schuss4_2g = 50
    $schusstimeout2 = 0
    ;******************************
    Dim $player1[4]
    Dim $player2[4]
    $schuss = ""

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

    $Fenster = GUICreate("",@DesktopWidth,@DesktopHeight, 0, 0, $WS_POPUP)
    GUISetState()
    _GDIPlus_Startup()
    $schliessen = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\schliessen.gif")
    For $sad = 0 To 3
    $richtung_bild = $richtung_bild + 1
    $player1[$richtung_bild] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\player1_" & $richtung_bild & ".gif")
    $player2[$richtung_bild] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\player2_" & $richtung_bild & ".gif")
    Next
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Fenster)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $hDC = GetHDC()

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

    $createbitmap = CreateImage(@DesktopWidth,@DesktopHeight) ;create empty bitmap (default = black)
    CreateBuffer(@DesktopWidth, @DesktopHeight) ;create buffer 800x600 for WM_PAINT
    SetBuffer($createbitmap) ;fill buffer with empty bitmap
    PaintImage($hDC,0,0,@DesktopWidth, @DesktopHeight,$createbitmap,0,0,0) ;copy empty bitmap to window

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

    While 1
    $maus = GUIGetCursorInfo()
    If Not($maus = "") Then
    If _IsPressed(01) And $maus[0] >= @DesktopHeight - 25 And $maus[0] >= @DesktopWidth -24 And $maus[1] <= 25 And $maus[1] <= @DesktopWidth Then _Exit()
    EndIf
    $hbrushschwarz = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hbrushblau = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    _GDIPlus_GraphicsFillRect($hbuffer,0,0,@DesktopWidth,@DesktopHeight,$hbrushschwarz)
    _GDIPlus_GraphicsFillRect($hbuffer,$schussx1,$schussy1,$schuss1_1g,$schuss1_2g,$hbrushblau)
    _GDIPlus_GraphicsFillRect($hbuffer,$schussx2,$schussy2,$schuss2_1g,$schuss2_2g,$hbrushblau)
    _GDIPlus_GraphicsFillRect($hbuffer,$schussx3,$schussy3,$schuss3_1g,$schuss3_2g,$hbrushblau)
    _GDIPlus_GraphicsFillRect($hbuffer,$schussx4,$schussy4,$schuss4_1g,$schuss4_2g,$hbrushblau)
    _GDIPlus_GraphicsDrawImageRect($hbuffer,$player1[$player1_bild],$player1x,$player1y,80,110)
    _GDIPlus_GraphicsDrawImageRect($hbuffer,$player2[$player2_bild],$player2x,$player2y,80,110)
    _GDIPlus_GraphicsDrawImageRect($hbuffer,$schliessen,@DesktopWidth -24,-1,25,25)
    SetPixelEffect($player1x, $player1y, 0x0000ff, 7, 16, 2, 100, 1, 50)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, @DesktopWidth, @DesktopHeight)
    ;player1
    If _IsPressed(26) Then
    $player1_bild = 0
    $player1y = $player1y - 15
    EndIf
    If _IsPressed(27) Then
    $player1_bild = 1
    $player1x = $player1x + 15
    EndIf
    If _IsPressed(25) Then
    $player1_bild = 3
    $player1x = $player1x -15
    EndIf
    If _IsPressed(28) Then
    $player1_bild = 2
    $player1y = $player1y + 15
    EndIf
    If _IsPressed("0D") Then
    If $schuss1_1 = "frei" Then
    If $player1_bild = 0 Then
    $schuss1_y1 = -30
    $schuss1_x1 = 0
    $schuss1_1g = 10
    $schuss1_2g = 50
    EndIf
    If $player1_bild = 1 Then
    $schuss1_y1 = 0
    $schuss1_x1 = 30
    $schuss1_1g = 50
    $schuss1_2g = 10
    EndIf
    If $player1_bild = 2 Then
    $schuss1_y1 = 30
    $schuss1_x1 = 0
    $schuss1_1g = 10
    $schuss1_2g = 50
    EndIf
    If $player1_bild = 3 Then
    $schuss1_y1 = 0
    $schuss1_x1 = -30
    $schuss1_1g = 50
    $schuss1_2g = 10
    EndIf
    $schussx1 = $player1x
    $schussy1 = $player1y
    $schuss1_1 = "besetzt"
    $schuss = "exist"
    $schusstimeout1 = 0
    EndIf
    If $schuss1_2 = "frei" And $schusstimeout1 >= 14 Then
    If $player1_bild = 0 Then
    $schuss1_y2 = -30
    $schuss1_x2 = 0
    $schuss2_1g = 10
    $schuss2_2g = 50
    $schussx2 = $player1x + 68
    $schussy2 = $player1y
    EndIf
    If $player1_bild = 1 Then
    $schuss1_y2 = 0
    $schuss1_x2 = 30
    $schuss2_1g = 50
    $schuss2_2g = 10
    $schussx2 = $player1x
    $schussy2 = $player1y+97
    EndIf
    If $player1_bild = 2 Then
    $schuss1_y2 = 30
    $schuss1_x2 = 0
    $schuss2_1g = 10
    $schuss2_2g = 50
    $schussx2 = $player1x +68
    $schussy2 = $player1y
    EndIf
    If $player1_bild = 3 Then
    $schuss1_y2 = 0
    $schuss1_x2 = -30
    $schuss2_1g = 50
    $schuss2_2g = 10
    $schussx2 = $player1x
    $schussy2 = $player1y+97
    EndIf
    $schuss1_2 = "besetzt"
    $schuss = "exist"
    EndIf
    EndIf
    ;player2
    If _IsPressed(51) Then
    If $schuss3_1 = "frei" Then
    If $player2_bild = 0 Then
    $schuss3_y1 = -30
    $schuss3_x1 = 0
    $schuss3_1g = 10
    $schuss3_2g = 50
    EndIf
    If $player2_bild = 1 Then
    $schuss3_y1 = 0
    $schuss3_x1 = 30
    $schuss3_1g = 50
    $schuss3_2g = 10
    EndIf
    If $player2_bild = 2 Then
    $schuss3_y1 = 30
    $schuss3_x1 = 0
    $schuss3_1g = 10
    $schuss3_2g = 50
    EndIf
    If $player2_bild = 3 Then
    $schuss3_y1 = 0
    $schuss3_x1 = -30
    $schuss3_1g = 50
    $schuss3_2g = 10
    EndIf
    $schussx3 = $player2x
    $schussy3 = $player2y
    $schuss3_1 = "besetzt"
    $schusstimeout2 = 0
    EndIf
    If $schuss3_2 = "frei" And $schusstimeout2 >= 14 Then
    If $player2_bild = 0 Then
    $schuss4_y2 = -30
    $schuss4_x2 = 0
    $schuss4_1g = 10
    $schuss4_2g = 50
    $schussx4 = $player2x + 68
    $schussy4 = $player2y
    EndIf
    If $player2_bild = 1 Then
    $schuss4_y2 = 0
    $schuss4_x2 = 30
    $schuss4_1g = 50
    $schuss4_2g = 10
    $schussx4 = $player2x
    $schussy4 = $player2y+97
    EndIf
    If $player2_bild = 2 Then
    $schuss4_y2 = 30
    $schuss4_x2 = 0
    $schuss4_1g = 10
    $schuss4_2g = 50
    $schussx4 = $player2x +68
    $schussy4 = $player2y
    EndIf
    If $player2_bild = 3 Then
    $schuss4_y2 = 0
    $schuss4_x2 = -30
    $schuss4_1g = 50
    $schuss4_2g = 10
    $schussx4 = $player2x
    $schussy4 = $player2y+97
    EndIf
    $schuss3_2 = "besetzt"
    EndIf
    EndIf
    If _IsPressed(57) Then
    $player2_bild = 0
    $player2y = $player2y - 15
    EndIf
    If _IsPressed(44) Then
    $player2_bild = 1
    $player2x = $player2x + 15
    EndIf
    If _IsPressed(41) Then
    $player2_bild = 3
    $player2x = $player2x -15
    EndIf
    If _IsPressed(53) Then
    $player2_bild = 2
    $player2y = $player2y + 15
    EndIf
    $schusstimeout1 = $schusstimeout1 + 1
    $schusstimeout2 = $schusstimeout2 + 1
    If $schussy1 <=-200 Or $schussx1 >= @DesktopWidth + 200 Or $schussy1 >= @DesktopHeight +200 Or $schussx1 <= -200 Then $schuss1_1 = "frei"
    If $schussy2 <=-200 Or $schussx2 >= @DesktopWidth + 200 Or $schussy2 >= @DesktopHeight +200 Or $schussx2 <= -200 Then $schuss1_2 = "frei"
    If $schussy3 <=-200 Or $schussx3 >= @DesktopWidth + 200 Or $schussy3 >= @DesktopHeight +200 Or $schussx3 <= -200 Then $schuss3_1 = "frei"
    If $schussy4 <=-200 Or $schussx4 >= @DesktopWidth + 200 Or $schussy4 >= @DesktopHeight +200 Or $schussx4 <= -200 Then $schuss3_2 = "frei"
    $schussx1 = $schussx1 + $schuss1_x1
    $schussy1 = $schussy1 + $schuss1_y1
    $schussx2 = $schussx2 + $schuss1_x2
    $schussy2 = $schussy2 + $schuss1_y2
    $schussx3 = $schussx3 + $schuss3_x1
    $schussy3 = $schussy3 + $schuss3_y1
    $schussx4 = $schussx4 + $schuss4_x2
    $schussy4 = $schussy4 + $schuss4_y2
    Sleep(10)
    WEnd

    Func _exit()
    _GDIPlus_BrushDispose($hbrushschwarz)
    _GDIPlus_BrushDispose($hbrushblau)
    _GDIPlus_GraphicsDispose($hgraphic)
    _GDIPlus_GraphicsDispose($hbuffer)
    _GDIPlus_BitmapDispose($hbitmap)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]
  • hab versehentlich die falsche datei hochgeladen ist aber fast die selbe.weil ich die prospeed befehle nicht kann

  • Hallo!

    ich musste bei meinem win7x64 noch die Zeile
    #AutoIt3Wrapper_UseX64=n
    hinzufügen; gibt sonst Probleme mit der prospeed....

    Und da soll man also Metereoiden abschiessen, nur sehe ich leider keine ;)
    Auch die schußgeschwindigkeit ist noch ziemlich lahm.
    Du könntest versuchen die Koordinaten vom Schuß mit denen von den Zielen zu vergleichen und wenn der Schuß bei +-5% steht hasste nen Treffer; so würde ich das versuchen.

    Grüsse von
    Techmix!

  • techmix die meteorieden kommen noch aber bevor ich die mache will ich den explosionseffekt haben

  • Ahhh so...
    baue dir eine Funktion welche den Effekt enthällt und starte diese bei identischen Coordinaten.
    Suche mal nach 'AudioSlide' von Sprenger, der hat das ganz ähnlich gemacht.

    Grüsse!

  • techmix das weiß ich mein einziges problem ist ich schaffe die explosion nicht

  • Ich sag ja suche mal nach 'AudioSlide', da ist ne Explosionsgrafik drinne und diese besteht aus mehreren Bildern welche eben abgespult werden. Bei dir sehe ich keine solche Grafiken.

    Das meinte ich damit!

  • bei prospeed gibts so einen befehl der ähnlich wie eine explosion ist

    [autoit]

    SetPixelEffect($player1x, $player1y, 0x0000ff, 7, 16, 2, 100, 1, 50)

    [/autoit]

    nur der wird aus irgendeinem grund nicht angezeigt