RectCollison

  • meinste so??

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <Array.au3>
    #Include <Misc.au3>

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

    HotKeySet("{ESC}", "ende")

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

    ; Hauptvariablen-------------------------
    $f = 0
    Global $guix, $guiy
    Global $fischx = 200, $fischy = 300, $movex = 10, $movey = 10
    ; ---------------------------------------

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

    ; Guierstellung--------------------------
    $gui1 = GUICreate ("Aquarium",(@DesktopWidth), (@DesktopHeight-65),0,0)
    GUISetBkColor(0x0000ff,$gui1)
    $hintergrund = GUICtrlCreatepic("bilder\hintergrund.gif",0,0,@DesktopWidth,@DesktopHeight-50)
    $fisch1 = GUICtrlCreatepic("bilder\fischrechts1.gif",$fischx,$fischy, 120,100)
    $futter = GUICtrlCreatePic("bilder\futter.gif",-200,-200,100,100)
    GUISetState (@SW_SHOW)
    ; ---------------------------------------

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

    AdlibEnable("move_fisch", 20)

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

    ; Hauptfunktion des Guis-----------------
    While 1
    $c = GUIGetCursorInfo()
    $f1pos = ControlGetPos( "Aquarium", "", $fisch1)
    $fupos = ControlGetPos( "Aquarium", "", $futter)
    $msg = GUIGetMsg()
    _RectCollision($f1pos[0], $f1pos[1], $f1pos[0]+200, $f1pos[1]+300, $fupos[0], $fupos[1], $fupos[0]+100, $fupos[1]+100)
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    If _IsPressed("01") and $f = 1 Then
    GUICtrlDelete($futter)
    $futter = GUICtrlCreatePic("bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    ElseIf _IsPressed("01") and $f = 0 then
    $futter = GUICtrlCreatePic("bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    Endif

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

    Wend
    ; ---------------------------------------

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

    ; Funktionen-----------------------------
    Func ende()
    Exit
    EndFunc

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

    Func move_fisch()
    Select
    Case $fischx < 0
    GUICtrlSetImage($fisch1,"bilder\fischrechts1.gif")
    $movex = Random(0, 10, 1)
    Case $fischx > @DesktopWidth - 120
    GUICtrlSetImage($fisch1,"bilder\fischlinks1.gif")
    $movex = Random(-10, 0, 1)
    EndSelect
    Select
    Case $fischy < 0
    $movey = Random(0, 10, 1)
    Case $fischy > @DesktopHeight - 100
    $movey = Random(-10, 0, 1)
    EndSelect
    $fischx = $fischx + $movex
    $fischy = $fischy + $movey
    GUICtrlSetPos($fisch1, $fischx, $fischy)
    EndFunc
    ; ---------------------------------------

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

    ;noch unwichtig-------------------------
    Func _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2)
    ; Prog@ndy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall("User32.dll", "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Return $r[0] <> 0
    EndFunc ;==>_RectCollision

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • @retrokid: Merke: Das Praktische an einer Funktion ist das man sie mit verschiedenen Werten aufrufen kann und sie für diese Werte immer die gleichen Funkion ausführt.

    Egal ob das jetzt eine selbsterstellte funktion wie diese ist oder ob es eine Standartfunktion von autoit ist (sowas wie GuiCtrlCreate... oder was auch immer) ;)

  • das funkt bei mir iwie nicht

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <Array.au3>
    #Include <Misc.au3>
    HotKeySet("{ESC}", "ende")
    ; Hauptvariablen-------------------------
    $f = 0
    Global $guix, $guiy
    Global $fischx = 200, $fischy = 300, $movex = 10, $movey = 10
    ; ---------------------------------------

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

    ; Guierstellung--------------------------
    $gui1 = GUICreate ("Aquarium",(@DesktopWidth), (@DesktopHeight-65),0,0)
    GUISetBkColor(0x0000ff,$gui1)
    $hintergrund = GUICtrlCreatepic("bilder\hintergrund.gif",0,0,@DesktopWidth,@DesktopHeight-50)
    $fisch1 = GUICtrlCreatepic("bilder\fischrechts1.gif",$fischx,$fischy, 120,100)
    $futter = GUICtrlCreatePic("bilder\futter.gif",-200,-200,100,100)
    GUISetState (@SW_SHOW)
    ; ---------------------------------------
    AdlibEnable("move_fisch", 20)

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

    ; Hauptfunktion des Guis-----------------
    While 1
    $c = GUIGetCursorInfo()
    $f1pos = ControlGetPos( "Aquarium", "", $fisch1)
    $fupos = ControlGetPos( "Aquarium", "", $futter)
    $msg = GUIGetMsg()
    _RectCollision($f1pos[0], $f1pos[1], $f1pos[0]+200, $f1pos[1]+300, $fupos[0], $fupos[1], $fupos[0]+100, $fupos[1]+100)
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    If _IsPressed("01") and $f = 1 Then
    GUICtrlDelete($futter)
    $futter = GUICtrlCreatePic("bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    ElseIf _IsPressed("01") and $f = 0 then
    $futter = GUICtrlCreatePic("bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    Endif
    Wend
    ; ---------------------------------------
    ; Funktionen-----------------------------
    Func ende()
    Exit
    EndFunc
    Func move_fisch()
    Select
    Case $fischx < 0
    GUICtrlSetImage($fisch1,"bilder\fischrechts1.gif")
    $movex = Random(0, 10, 1)
    Case $fischx > @DesktopWidth - 120
    GUICtrlSetImage($fisch1,"bilder\fischlinks1.gif")
    $movex = Random(-10, 0, 1)
    EndSelect
    Select
    Case $fischy < 0
    $movey = Random(0, 10, 1)
    Case $fischy > @DesktopHeight - 100
    $movey = Random(-10, 0, 1)
    EndSelect
    $fischx = $fischx + $movex
    $fischy = $fischy + $movey
    GUICtrlSetPos($fisch1, $fischx, $fischy)
    EndFunc
    ; ---------------------------------------

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

    ;noch unwichtig-------------------------
    Func _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2)
    ; Prog@ndy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall("User32.dll", "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Return $r[0] <> 0
    If _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2) Then
    MsgBox(0,"warnung","zsstoß")
    Endif
    EndFunc ;==>_RectCollision

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Bei mir schon :)
    Das einzige die Positionen finde ich net so richtig.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>

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

    HotKeySet("{ESC}", "ende")

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

    ; Hauptvariablen-------------------------
    $f = 0
    Global $guix, $guiy
    Global $fischx = 200, $fischy = 300, $movex = 10, $movey = 10
    ; ---------------------------------------

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

    ; Guierstellung--------------------------
    $gui1 = GUICreate ("Aquarium",(@DesktopWidth), (@DesktopHeight-65),0,0)
    GUISetBkColor(0x0000ff,$gui1)
    $hintergrund = GUICtrlCreatepic("Aqua\bilder\hintergrund.gif",0,0,@DesktopWidth,@DesktopHeight-50)
    $fisch1 = GUICtrlCreatepic("Aqua\bilder\fischrechts1.gif",$fischx,$fischy, 120,100)
    $futter = GUICtrlCreatePic("Aqua\bilder\futter.gif",-200,-200,100,100)
    GUISetState (@SW_SHOW)
    ; ---------------------------------------

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

    AdlibEnable("move_fisch", 20)

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

    ; Hauptfunktion des Guis-----------------
    While 1
    $c = GUIGetCursorInfo()
    $f1pos = ControlGetPos( "Aquarium", "", $fisch1)
    $fupos = ControlGetPos( "Aquarium", "", $futter)
    $msg = GUIGetMsg()

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

    $erg = _RectCollision($f1pos[0], $f1pos[1], $f1pos[0]+20, $f1pos[1]+20, $fupos[0], $fupos[1], $fupos[0]+20, $fupos[1]+20)

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit

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

    Case $erg = TRUE
    msgbox(0,"",$erg)
    EndSelect
    If _IsPressed("01") and $f = 1 Then
    GUICtrlDelete($futter)
    $futter = GUICtrlCreatePic("Aqua\bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    ElseIf _IsPressed("01") and $f = 0 then
    $futter = GUICtrlCreatePic("Aqua\bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    Endif

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

    Wend
    ; ---------------------------------------

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

    ; Funktionen-----------------------------
    Func ende()
    Exit
    EndFunc

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

    Func move_fisch()
    Select
    Case $fischx < 0
    GUICtrlSetImage($fisch1,"Aqua\bilder\fischrechts1.gif")
    $movex = Random(0, 10, 1)
    Case $fischx > @DesktopWidth - 120
    GUICtrlSetImage($fisch1,"Aqua\bilder\fischlinks1.gif")
    $movex = Random(-10, 0, 1)
    EndSelect
    Select
    Case $fischy < 0
    $movey = Random(0, 10, 1)
    Case $fischy > @DesktopHeight - 100
    $movey = Random(-10, 0, 1)
    EndSelect
    $fischx = $fischx + $movex
    $fischy = $fischy + $movey
    GUICtrlSetPos($fisch1, $fischx, $fischy)
    EndFunc
    ; ---------------------------------------

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

    ;noch unwichtig-------------------------
    Func _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2)
    ; Prog@ndy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall("User32.dll", "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Return $r[0] <> 0
    EndFunc ;==>_RectCollision

    [/autoit]

    ICH HABE VOR DIE BILDER NOCH AQUA VOR GEMACHT ALSO ACHTUNG!
    müsstest du eben anpassen

    MfG
    Der_Doc

  • Ja die genauen Positionen deiner Bilder mußt du aber selber raus bekommen ;) Das war nur ein Versuch von mir.

    Ein Tip noch:
    wenn du SciTE verwendest, benutze das Tool OrganizeIncludes das wirft überflüssige Includes raus und fügt benötigte ein.

    MfG
    Der_Doc

  • thx aber komisch finde ich das es nicht klappt wenn man anstatt der msg das fiutterpic löscht dann kommt nämlich error

    und wie downloade ich das ehergesagt kannste mir den link zu dem thread geben

    ah es klappt doch sorry ich muss das fiutter dabnach einfach nochmal erstellen damit die abfrage weiterlaufen kann.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (16. Dezember 2009 um 17:59)

  • Erstmal ein Update für deine Bildpositionen.

    Spoiler anzeigen
    [autoit]

    $erg = _RectCollision($f1pos[0], $f1pos[1], $f1pos[0]+$f1pos[3], $f1pos[1]+$f1pos[2], $fupos[0], $fupos[1], $fupos[0]+$fupos[3], $fupos[1]+$fupos[2])

    [/autoit]

    Dann sollteste du die Bilder "Rahmen" so eng wie möglich um den Fisch und das Futter legen. soll heissen die Bilder so eng wie möglich ausschneiden.

    So Das Tool findest du im Forum "linke Seite" in der Box Autoit Downloads.

    MfG
    Der_Doc

  • cool danke es verschwindet jetzt vllt estwas zu früh aber dafür ist es viel besser als vorher thx

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Habe mich wohl geirrt :S

    Spoiler anzeigen
    [autoit]

    $erg = _RectCollision($f1pos[0], $f1pos[1], $f1pos[0]+$f1pos[2], $f1pos[1]+$f1pos[3], $fupos[0], $fupos[1], $fupos[0]+$fupos[2], $fupos[1]+$fupos[3])

    [/autoit]

    Und es sollte bevor das nächste mal TRUE angezeigt wird mindestens einmal Flase kommen.

    MfG
    Der_Doc

  • So nun ist das alles drin.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>

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

    HotKeySet("{ESC}", "ende")

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

    ; Hauptvariablen-------------------------
    $lauf = 0
    $f = 0
    Global $guix, $guiy
    Global $fischx = 200, $fischy = 300, $movex = 10, $movey = 10
    ; ---------------------------------------

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

    ; Guierstellung--------------------------
    $gui1 = GUICreate ("Aquarium",(@DesktopWidth), (@DesktopHeight-65),0,0)
    GUISetBkColor(0x0000ff,$gui1)
    $hintergrund = GUICtrlCreatepic("Aqua\bilder\hintergrund.gif",0,0,@DesktopWidth,@DesktopHeight-50)
    $fisch1 = GUICtrlCreatepic("Aqua\bilder\fischrechts1.gif",$fischx,$fischy, 120,100)
    $futter = GUICtrlCreatePic("Aqua\bilder\futter.gif",-200,-200,100,100)
    GUISetState (@SW_SHOW)
    ; ---------------------------------------

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

    AdlibEnable("move_fisch", 20)

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

    ; Hauptfunktion des Guis-----------------
    While 1
    $c = GUIGetCursorInfo()
    $f1pos = ControlGetPos( "Aquarium", "", $fisch1)
    $fupos = ControlGetPos( "Aquarium", "", $futter)
    $msg = GUIGetMsg()

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

    $erg = _RectCollision($f1pos[0], $f1pos[1], $f1pos[0]+$f1pos[2], $f1pos[1]+$f1pos[3], $fupos[0], $fupos[1], $fupos[0]+$fupos[2], $fupos[1]+$fupos[3])

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

    if $msg = $GUI_EVENT_CLOSE Then Exit
    if $erg = FALSE Then $lauf = 0
    if $erg = TRUE AND $lauf = 0 Then
    msgbox(0,"",$erg)
    $lauf=1
    EndIf

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

    If _IsPressed("01") and $f = 1 Then
    GUICtrlDelete($futter)
    $futter = GUICtrlCreatePic("Aqua\bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    ElseIf _IsPressed("01") and $f = 0 then
    $futter = GUICtrlCreatePic("Aqua\bilder\futter.gif",$c[0]-40,$c[1]-40,100,100)
    $f = 1
    Endif

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

    Wend
    ; ---------------------------------------

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

    ; Funktionen-----------------------------
    Func ende()
    Exit
    EndFunc

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

    Func move_fisch()
    Select
    Case $fischx < 0
    GUICtrlSetImage($fisch1,"Aqua\bilder\fischrechts1.gif")
    $movex = Random(0, 10, 1)
    Case $fischx > @DesktopWidth - 120
    GUICtrlSetImage($fisch1,"Aqua\bilder\fischlinks1.gif")
    $movex = Random(-10, 0, 1)
    EndSelect
    Select
    Case $fischy < 0
    $movey = Random(0, 10, 1)
    Case $fischy > @DesktopHeight - 100
    $movey = Random(-10, 0, 1)
    EndSelect
    $fischx = $fischx + $movex
    $fischy = $fischy + $movey
    GUICtrlSetPos($fisch1, $fischx, $fischy)
    EndFunc
    ; ---------------------------------------

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

    ;noch unwichtig-------------------------
    Func _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2)
    ; Prog@ndy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall("User32.dll", "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Return $r[0] <> 0
    EndFunc ;==>_RectCollision

    [/autoit]

    Aber wieder an den Pfad der Bilder denken.

    MfG
    Der_Doc