2D Spiel Hilfe

  • Also ist es egal welche variable ich nehme und ich kann imer 1 hinschreiben?

    [autoit]


    switch 1
    case $x>$Objekte[0][3]-$Objekte[$number][3]
    $x=$Objekte[0][3]-$Objekte[$number][3]
    $return=1
    endswitch

    [/autoit]


    Ja, theoretisch. Aber dann ist Switch auch nicht mehr schneller als Select....

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Und dann ist If schneller als Switch, daher lohnt sich die ganze Sache garnicht?
    Laut meinen Testergebnissen (hab sie in den alten post rein editiert) ist die Funktion mit IF schneller als mit Swich 1

  • wenn du mehrere werte vergleichst ist switch um einiges schneller als select und noch vieeeeel schneller als if
    das merkt man schon
    boa da hatt ich mal nen thread bzw hab ich da mitgeschrieben...
    switch und select waren bei 3 (!!!) variablen ca. 3 mal so schnell oO

    Padmak

    Edit:
    Kurzer geschwindigkeitsvergleich:

    Spoiler anzeigen
    [autoit]


    #include-once
    #RequireAdmin
    ;Scripted by Padmak, http://www.autoit.de
    $var1 = 1
    $var2 = 2
    $var3 = 3
    $timer1 = TimerInit()
    If $var1 = 1 Then
    If $var2 = 2 Then
    If $var3 = 3 Then
    $var1 = $var1 + 1
    If $var1 = 2 And $var2 = 2 Then

    EndIf
    EndIf
    EndIf
    EndIf
    $timerende1 = TimerDiff($timer1)
    ConsoleWrite("If hat " & $timerende1 & " Millisekunden gebraucht" & @CRLF)
    $timer2 = TimerInit()
    Select
    Case $var1 = 1
    Select
    Case $var2 = 2
    Select
    Case $var3 = 3
    $var1 = $var1 + 1
    Select
    Case $var1 = 2 And $var2 = 2

    EndSelect
    EndSelect
    EndSelect
    EndSelect
    $timerende2 = TimerDiff($timer2)
    ConsoleWrite("Select hat " & $timerende2 & " Millisekunden gebraucht" & @CRLF)
    $timer3 = TimerInit()
    Switch 1
    Case $var1 = 1
    Switch 1
    Case $var2 = 2
    Switch 1
    Case $var3 = 3
    $var1 = $var1 + 1
    Switch 1
    Case $var1 = 2 And $var2 = 2

    EndSwitch
    EndSwitch
    EndSwitch
    EndSwitch
    $timerende3 = TimerDiff($timer3)
    ConsoleWrite("Switch hat " & $timerende3 & " Millisekunden gebraucht" & @CRLF)

    [/autoit]


    10 Durchläufe:

    Spoiler anzeigen


    also: Select oder switch
    nicht if :D

    2 Mal editiert, zuletzt von Padmak (10. Februar 2009 um 19:44)

  • Ok, aber was nehme ich dann statt "switch 1" select ist ja ein bieschen schneller als if, aber wenn ich eine "And" Verknüfung habe bleibt mir doch nicht anderes über außer switch 1 zu nehmen, oder gibt es ne andere möglichkeit?

  • nö da geht auch select
    halt

    [autoit]


    Select
    Case $bla = 0 And $bla1 = 1
    ;anweisung
    Endselect

    [/autoit]

    Padmak

    Edit: Also wenn man nur eine variable hat sind switch und select unschlagbar:

    Spoiler anzeigen


    Testscript:

    Spoiler anzeigen
    [autoit]


    $Variable = 9999
    ; If
    For $x = 1 To 10
    $timer1 = TimerInit()
    For $i = 1 To 9999
    If $Variable = $i Then
    ConsoleWrite("If ist Fertig" & @CRLF)
    EndIf
    Next
    ; If ende

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

    ;Switch
    $timerende1 = TimerDiff($timer1)
    ConsoleWrite("If braucht " & $timerende1 & " Millisekunden" & @CRLF)
    $timer2 = TimerInit()
    For $i = 1 To 9999
    Switch $Variable
    Case $i
    ConsoleWrite("Switch ist Fertig" & @CRLF)
    EndSwitch
    Next
    $timerende2 = TimerDiff($timer2)
    ConsoleWrite("Switch braucht " & $timerende2 & " Millisekunden" & @CRLF)
    ;Switch Ende

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

    ;Select
    $timer3 = TimerInit()
    For $i = 1 To 9999
    Select
    Case $Variable = $i
    ConsoleWrite("Select ist Fertig" & @CRLF)
    EndSelect
    Next
    $timerende3 = TimerDiff($timer3)
    ConsoleWrite("Switch braucht " & $timerende3 & " Millisekunden" & @CRLF)
    ;Select Ende
    Next

    [/autoit]

    So jez is übersichtlicher :D

    2 Mal editiert, zuletzt von Padmak (10. Februar 2009 um 20:10)

  • Habe gerade weiter getestet und das ganze in eine for schleife gepackt die 100 mal läuft

    Spoiler anzeigen
    [autoit]

    #include-once
    #RequireAdmin
    ;Scripted by Padmak, http://www.autoit.de
    sleep(1000)
    $var1 = 1
    $var2 = 2
    $var3 = 3
    $timer1 = TimerInit()
    for $r=0 to 100
    If $var1 = 2 And $var2 = 2 Then

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

    EndIf
    next
    $timerende1 = TimerDiff($timer1)
    send("If hat " & $timerende1 & " Millisekunden gebraucht" & @CRLF)
    $timer2 = TimerInit()

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

    for $r=0 to 100
    Select
    Case $var1 = 2 And $var2 = 2

    EndSelect
    Next

    $timerende2 = TimerDiff($timer2)
    send("Select hat " & $timerende2 & " Millisekunden gebraucht" & @CRLF)
    $timer3 = TimerInit()

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

    for $r=0 to 100
    Switch 1
    Case $var1 = 2 And $var2 = 2

    EndSwitch
    Next

    $timerende3 = TimerDiff($timer3)
    send("Switch hat " & $timerende3 & " Millisekunden gebraucht" & @CRLF)

    [/autoit]

    Ergebis:

    Das heißt es variiert und alles scheint gleich schnell zu sein o0

  • Hab die forschleife mal 100000 mal durchlaufen lassen und das Ergebnis spricht für If:

    Edit:
    Bzw: Arrays kann ich sorgen frei verwenden ohne das sie das Script langsam machen?

  • Also meins spricht ne andere sprache
    script:

    Spoiler anzeigen
    [autoit]


    $Variable = 9999
    ; If
    For $x = 1 To 10
    $timer1 = TimerInit()
    For $i = 1 To 9999
    If $Variable = $i Then
    ConsoleWrite("If ist Fertig" & @CRLF)
    EndIf
    Next
    ; If ende

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

    ;Switch
    $timerende1 = TimerDiff($timer1)
    ConsoleWrite("If braucht " & $timerende1 & " Millisekunden" & @CRLF)
    $timer2 = TimerInit()
    For $i = 1 To 9999
    Switch $Variable
    Case $i
    ConsoleWrite("Switch ist Fertig" & @CRLF)
    EndSwitch
    Next
    $timerende2 = TimerDiff($timer2)
    ConsoleWrite("Switch braucht " & $timerende2 & " Millisekunden" & @CRLF)
    ;Switch Ende

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

    ;Select
    $timer3 = TimerInit()
    For $i = 1 To 9999
    Select
    Case $Variable = $i
    ConsoleWrite("Select ist Fertig" & @CRLF)
    EndSelect
    Next
    $timerende3 = TimerDiff($timer3)
    ConsoleWrite("Switch braucht " & $timerende3 & " Millisekunden" & @CRLF)
    ;Select Ende
    Next

    [/autoit]


    auswertung:

    Spoiler anzeigen


    Padmak

    Edit:
    So hier ist deine funktion MIT geschwindigkeitstest :D *luxus :D*

    Spoiler anzeigen
    [autoit]


    dim $Objekte[10][7]
    $Objekte[0][0]=0
    $timer1 = TimerInit()
    _ObjectTouchIf(1)
    $timerende1 = TimerDiff($timer1)
    $timer2 = TimerInit()
    _ObjectTouchSwitch(1)
    $timerende2 = TimerDiff($timer2)
    ConsoleWrite("If: " & $timerende1 & @CRLF)
    ConsoleWrite("Switch/Select: " & $timerende2 & @CRLF)
    func _ObjectTouchIf($number,$ausnahmen="",$richtung="",$pixel=0,$art=1) ; Mit If
    $x=$Objekte[$number][1]
    $y=$Objekte[$number][2]
    local $return=0

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

    if $richtung="x" Then
    $x=$x+$pixel
    endif

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

    if $richtung="y" Then
    $y=$y+$pixel
    EndIf

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

    if $Objekte[$number][6]=2 then

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

    if $x<$Objekte[0][1] then
    $x=$Objekte[0][1]
    $return=1
    endif

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

    if $x>$Objekte[0][3]-$Objekte[$number][3] then
    $x=$Objekte[0][3]-$Objekte[$number][3]
    $return=1
    endif

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

    if $y<$Objekte[0][2] then
    $y=$Objekte[0][2]
    $return=1
    EndIf

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

    if $y>$Objekte[0][4]-$Objekte[$number][4] then
    $y= $Objekte[0][4]-$Objekte[$number][4]
    $return=1
    endif

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

    EndIf

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

    if $Objekte[$number][6]<>0 then
    for $r=1 to $Objekte[0][0]
    if $r <> $number and $Objekte[$r][0]<>"" and $Objekte[$r][6]<>0 and stringinstr($ausnahmen,$r)=0 Then
    if $x >= $Objekte[$r][1] + $Objekte[$r][3] or $Objekte[$r][1] >= $x + $Objekte[$number][3] or $y >= $Objekte[$r][2] + $Objekte[$r][4] or $Objekte[$r][2] >= $y + $Objekte[$number][4] then
    Else
    $y=$Objekte[$number][2]
    $x=$Objekte[$number][1]
    $return=1
    endif
    endif
    next
    endif

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

    if $art=1 then
    return $return
    Else
    local $koordinaten[3]
    $koordinaten[0]=$x
    $koordinaten[1]=$y
    $koordinaten[2]=$return
    return $koordinaten
    endif
    endfunc

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

    Func _ObjectTouchSwitch($number, $ausnahmen = "", $richtung = "", $pixel = 0, $art = 1) ;Func mit Switch/Select
    $x = $Objekte[$number][1]
    $y = $Objekte[$number][2]
    Local $return = 0
    Switch $richtung ;Auf jeden fall schneller
    Case "x"
    $x = $x + $pixel
    Case "y"
    $y = $y + $pixel
    EndSwitch
    Select
    Case $Objekte[$number][6]
    Select
    Case $x < $Objekte[0][1]
    $x = $Objekte[0][1]
    $return = 1
    Case $x > $Objekte[0][3] - $Objekte[$number][3]
    $x = $Objekte[0][3] - $Objekte[$number][3]
    $return = 1
    Case $y < $Objekte[0][2]
    $y = $Objekte[0][2]
    $return = 1
    Case $y > $Objekte[0][4] - $Objekte[$number][4]
    $y = $Objekte[0][4] - $Objekte[$number][4]
    $return = 1
    EndSelect
    Select
    Case $Objekte[$number][6] <> 0
    For $r = 1 To $Objekte[0][0]
    Select
    Case $r <> $number And $Objekte[$r][0] <> "" And $Objekte[$r][6] <> 0 And StringInStr($ausnahmen, $r) = 0
    Select
    Case $x >= $Objekte[$r][1] + $Objekte[$r][3] Or $Objekte[$r][1] >= $x + $Objekte[$number][3] Or $y >= $Objekte[$r][2] + $Objekte[$r][4] Or $Objekte[$r][2] >= $y + $Objekte[$number][4]
    Case Else
    $y = $Objekte[$number][2]
    $x = $Objekte[$number][1]
    $return = 1
    EndSelect
    EndSelect
    Next
    EndSelect
    EndSelect
    Switch $art ; Auch auf jeden fall schneller
    Case 1
    Return $return
    Case Else
    Local $koordinaten[3]
    $koordinaten[0] = $x
    $koordinaten[1] = $y
    $koordinaten[2] = $return
    Return $koordinaten
    EndSwitch
    EndFunc ;==>_ObjectTouch

    [/autoit]

    Ergebnisse:

    Spoiler anzeigen


    Fazit: Meine ist immer schneller :D
    ob du sie auch brauchen kannst is was anders

    4 Mal editiert, zuletzt von Padmak (10. Februar 2009 um 20:43)

  • Meinst du meine Funktion aus dem Program? Die Variert leider immer so das ich jetzt noch keinen unterschied gemerkt habe. (Außerdem läst sie sich schlecht testen)

    Meine Auswertung ist so ähnlich wie deine und sie sagt: If ist ein kleines bieschen schneller!

    Spoiler anzeigen

    If braucht 21.1433296689942 Millisekunden
    Switch braucht 20.7020026288257 Millisekunden
    Select braucht 17.2827831470201 Millisekunden

    If braucht 17.1913609131887 Millisekunden
    Switch braucht 20.3796851275791 Millisekunden
    Select braucht 17.414783163782 Millisekunden

    If braucht 17.1482688442246 Millisekunden
    Switch braucht 21.3023582606169 Millisekunden
    Select braucht 17.3502498222539 Millisekunden

    If braucht 17.021018034415 Millisekunden
    Switch braucht 20.5630184841928 Millisekunden
    Select braucht 17.2768466383297 Millisekunden

    If braucht 17.0815005817779 Millisekunden
    Switch braucht 20.4771137113795 Millisekunden
    Select braucht 17.4291704671963 Millisekunden

    If braucht 17.0700466120694 Millisekunden
    Switch braucht 20.2948279739464 Millisekunden
    Select braucht 17.6815768484542 Millisekunden

    If braucht 16.8570307120039 Millisekunden
    Switch braucht 20.6201486501776 Millisekunden
    Select braucht 17.5135387318779 Millisekunden

    If braucht 17.0120783507401 Millisekunden
    Switch braucht 20.5415772116289 Millisekunden
    Select braucht 17.4514498351047 Millisekunden

    If braucht 17.079545025974 Millisekunden
    Switch braucht 20.5780343591155 Millisekunden
    Select braucht 17.3109990236189 Millisekunden

    If braucht 17.0015323176549 Millisekunden
    Switch braucht 20.7846248615397 Millisekunden
    Select braucht 17.3142117224396 Millisekunden

  • hä mit welchem script hast du bitte getestet?
    und was hast du überhaupt getestet?
    wenn des mein script war dann hab ich angst vor deim pc :D

    Padmak

    Edit: 500ster Post *feier*
    :rock: :rock: :rock:

  • Ich habe jetzt dein obes Script getestet, als du deinen Beitrag noch nicht bearbeitet hattest.
    Ich Teste jetzt mal deine SwitchObjectTouch Test funktion, werte kommen per edit ^^

    edit:
    Ok, du hast recht. Aber ich denke auch die Mischung zwischen Select und Switch ist wichtig. (argh ich lag falsch :(^^)

    Spoiler anzeigen

    If: 0.0868127094365345
    Switch/Select: 0.0463047677847324

    If: 0.122641285414766
    Switch/Select: 0.0473523869653825

    If: 0.0877206460597646
    Switch/Select: 0.0469333392931225

    If: 0.0879301698958946
    Switch/Select: 0.0474222282440925

    If: 0.0870920745513745
    Switch/Select: 0.0469333392931225

    If: 0.0926793768481748
    Switch/Select: 0.0472127044079625

    Einmal editiert, zuletzt von Oger-Lord (10. Februar 2009 um 20:53)

  • wenn man einfach nur mehrere werte vergleichen will, z.b. mehrere variablen dann select
    wenn man aber eine variable hat und sie auf werte abfrägt, auf jeden fall Switch $variable
    funzt die funktion die ich geschrieben hab?
    da isses ja auch gemischt

    Padmak

  • Hab er gerade mal im laufenden Spiel getestet. 100 Durchläufe des gesammten while 1 scripts im Durchschnitt:

    If:
    3,2425 Millisekunden

    Switch/Select:
    2,8885 Millisekunden

    Aber beim Test habe ich die Figur nicht bewegt, wenn sie bewegt wird, wird die Funktion noch einmal wesentlich öfters aufgerufen.
    Ich kann schlecht 2 mal genau die gleichlange bewegung, richtung usw machen und daher konnte ich das nicht testen^^

    Hab die Funktion selbst verändert, da in deiner alles in einer reihe steht ;)

  • wie alles in einer reihe?
    ich habs genau in der selben reihenfolge wie du gemacht
    ich habs nur so verschachtelt, bzw des war tidy script (schaut so schöner aus^^)
    merkst du nen unterschied zwischen unsern beiden?

    Padmak

  • So, und heute habe ich wieder einen großen durchbruch geschaft
    Die Pilze bewegen sich nun und du musst ausweichen!

    Außerdem bekommt das ganze eine neue Struktur:
    User Code|Jump & Run hilfen|Object Funktionen

    Das heißt im späteren verlauf wird noch mehr mit "Jump & Run hilfen" gearbeitet welche wiederum die Object Funktionen benutzten.
    Das erste in dieser Kategorie sind die Pilz Funktionen.

    Zitat

    _SetPilz()
    _DeletePilz()
    _MovePilz()

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _SetPilz()
    ; Description: Trägt einen Pilz in die Pilz Array ein
    ; Parameter(s): $Array - Die Object Array des Pilzes
    ; $Xa - X(a) weiter links als dieser Punkt darf sich der Pilz nicht bewegen
    ; $Xb - X(b) weiter rechts als dieser Punkt darf sich der Pilz nicht bewegen
    ; $speed - Die Geschwindigkeit mit der sich der Pilz bewegt
    ; $richtung - "l" für links und "r" für rechts
    ; Requirement(s): A new AutoIt version
    ; Return Value(s): On Success -
    ; On Failure -
    ; Author(s): Oger-Lord
    ;===============================================================================
    func _SetPilz($array,$Xa,$Xb,$speed,$richtung)

    local $i=1
    while $i<ubound($pilze) ;Die $pilz Array wird durchgegangen
    switch $pilze[$i][0]
    case "" ;wenn ein leerer eintrag gefunden wurde
    local $string=_GetObjectGroupString($array) ;wandelt die Object Array in einen String um
    ;Die Werte werden in die Array eingetragen
    $pilze[$i][0]=$string ;Object Gruppe als String
    $pilze[$i][1]=$Xa
    $pilze[$i][2]=$Xb
    $pilze[$i][3]=$speed
    $pilze[$i][4]=$richtung

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

    $i=100000
    endswitch
    $i=$i+1
    wend

    select
    case $i<>100001 ;Fals es kein leeres Element gab
    local $string=_GetObjectGroupString($array) ;wandelt die Object Array in einen String um
    local $avAdd[5] = [$string,$Xa,$Xb,$speed,$richtung] ;Die Werte werden in eine Array eingetragen
    __ArrayAdd($pilze, $avAdd, False) ;Die Array wird angehängt
    $pilze[0][0] = $pilze[0][0] +1
    endselect
    endfunc

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

    ;===============================================================================
    ; Function Name: _DeletePilz()
    ; Description: Löscht einen Pilz aus der Array
    ; Parameter(s): $Array - Die Object Array des Pilzes
    ; Requirement(s): A new AutoIt version
    ; Return Value(s): On Success -
    ; On Failure -
    ; Author(s): Oger-Lord
    ;===============================================================================
    func _DeletePilz($array)
    local $string=_GetObjectGroupString($array) ;wandelt die Object Array in einen String um
    local $i=1

    while $i<ubound($pilze)
    switch $pilze[$i][0]
    case $string ;Wenn die Objektgruppe mit diesem Array eintrag übereinstimmt
    $pilze[$i][0]="" ;wird der erste wert auf "" gesetzt und gilt als leer
    $i=10000
    endswitch
    $i=$i+1
    wend
    endfunc

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

    ;===============================================================================
    ; Function Name: _MovePilz()
    ; Description: Bewegt alle Pize aus der Array
    ; Parameter(s):
    ; Requirement(s): A new AutoIt version
    ; Return Value(s): On Success -
    ; On Failure -
    ; Author(s): Oger-Lord
    ;===============================================================================
    func _MovePilze()
    for $r=1 to ubound($pilze)-1 ;die array wird durchgegangen
    switch $pilze[$r][0]
    case "" ;der eintrag ist nicht leer
    case else
    local $array=_GetObjectGroupArray($pilze[$r][0]) ;Object Array wird anhand des gespeicherten Strings ermittelt
    local $koordinaten=_GetObjectPosition($array[0]) ;Die Position des Pilzhutes wird ermittelt

    select
    case $koordinaten[0]<=$pilze[$r][1] ;wenn der pilzhut zu weit links ist
    $pilze[$r][4]="r" ;wird die Richtung auf "r" gesetzt
    EndSelect

    select
    case $koordinaten[0]>=$pilze[$r][2] ;wenn der pilzhut zu weit rechts ist
    $pilze[$r][4]="l" ;wird die Richtung auf "l" gesetzt
    EndSelect

    switch $pilze[$r][4]
    case "r" ;wenn die richtung "r" ist
    _MoveObjectGroup($array,"x",$pilze[$r][3]) ;wird der Pilzhut nach rechts bewegt
    case "l" ;wenn die richtung "l" ist
    _MoveObjectGroup($array,"x",0-$pilze[$r][3]) ;wird der Pilzhut nach links bewegt
    endswitch
    endswitch
    next
    EndFunc

    [/autoit]

    Außerdem sind im Object Code auch weitere neue Funktionen aufgetaucht.
    Zum Beispiel

    Zitat

    _GetObjectPosition()
    _GetObjectGroupString()
    _GetObjectGroupArray()

    Doch was macht die _GetObjectGroupString()?
    Sie wandelt eine Object Array in einen String um, dadurch kann man auch eine Array von Objekt Gruppen erstellen. Dies war vorher nicht möglich.
    Außerdem kann der String mit _GetObjectGroupArray() wieder zurüchgewandelt und benutzt werden.

    Den download gibt es wie immer im ersten Post.

    Mfg Oger-Lord

  • hey respekt *klatsch*
    des wird immer besser^^
    kann des sein dass du meine verbesserte funktion noch weiter verbessert hast^^

    Padmak

    Edit: So hab sie jez nochmal auf geschwindigkeit geprüft:

    Spoiler anzeigen


    du musst UNBEDINGT in der Funktion $Objekte festlegen ( so [10][10] oder so) sonst gibts nen error
    man muss sie bis jez immer von hand "Dim"men^^
    deine alte ist die mit if :D
    die is auch gar net so schlecht^^
    aber meine is nach wie vor besser
    testcode:

    Spoiler anzeigen
    [autoit]


    Dim $Objekte[10][10]
    For $i = 1 To 10
    $timer2 = TimerInit()
    _ObjectTouchDeins(1)
    $timerende2 = TimerDiff($timer2)
    $timer3 = TimerInit()
    _ObjectTouchAlt(1)
    $timerende3 = TimerDiff($timer3)
    $timer1 = TimerInit()
    _ObjectTouchMeins(1)
    $timerende1 = TimerDiff($timer1)
    ConsoleWrite("Test " & $i & @CRLF)
    ConsoleWrite("Meine braucht " & $timerende1 & " Millisekunden" & @CRLF)
    ConsoleWrite("Deine braucht " & $timerende2 & " Millisekunden" & @CRLF)
    ConsoleWrite("Deine alte braucht " & $timerende3 & " Millisekunden" & @CRLF & @CRLF)
    Next

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

    Func _ObjectTouchMeins($number, $ausnahmen = "", $richtung = "", $pixel = 0, $art = 1)
    $x = $Objekte[$number][1]
    $y = $Objekte[$number][2]
    Local $return = 0
    Switch $richtung ;Auf jeden fall schneller
    Case "x"
    $x = $x + $pixel
    Case "y"
    $y = $y + $pixel
    EndSwitch
    Select
    Case $Objekte[$number][6]
    Select
    Case $x < $Objekte[0][1]
    $x = $Objekte[0][1]
    $return = 1
    Case $x > $Objekte[0][3] - $Objekte[$number][3]
    $x = $Objekte[0][3] - $Objekte[$number][3]
    $return = 1
    Case $y < $Objekte[0][2]
    $y = $Objekte[0][2]
    $return = 1
    Case $y > $Objekte[0][4] - $Objekte[$number][4]
    $y = $Objekte[0][4] - $Objekte[$number][4]
    $return = 1
    EndSelect
    Select
    Case $Objekte[$number][6] <> 0
    For $r = 1 To $Objekte[0][0]
    Select
    Case $r <> $number And $Objekte[$r][0] <> "" And $Objekte[$r][6] <> 0 And StringInStr($ausnahmen, $r) = 0
    Select
    Case $x >= $Objekte[$r][1] + $Objekte[$r][3] Or $Objekte[$r][1] >= $x + $Objekte[$number][3] Or $y >= $Objekte[$r][2] + $Objekte[$r][4] Or $Objekte[$r][2] >= $y + $Objekte[$number][4]
    Case Else
    $y = $Objekte[$number][2]
    $x = $Objekte[$number][1]
    $return = 1
    EndSelect
    EndSelect
    Next
    EndSelect
    EndSelect
    Switch $art ; Auch auf jeden fall schneller
    Case 1
    Return $return
    Case Else
    Local $koordinaten[3]
    $koordinaten[0] = $x
    $koordinaten[1] = $y
    $koordinaten[2] = $return
    Return $koordinaten
    EndSwitch
    EndFunc ;==>_ObjectTouch

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

    func _ObjectTouchDeins($number,$ausnahmen="",$richtung="",$pixel=0,$art=1)

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

    $x=$Objekte[$number][1]
    $y=$Objekte[$number][2]
    local $return=0

    switch $richtung
    case "x"
    $x=$x+$pixel
    Case "y"
    $y=$y+$pixel
    endswitch

    switch $Objekte[$number][6]
    case 2

    select
    case $x<$Objekte[0][1]
    $x=$Objekte[0][1]
    $return=1
    endselect

    select
    case $x>$Objekte[0][3]-$Objekte[$number][3]
    $x=$Objekte[0][3]-$Objekte[$number][3]
    $return=1
    endselect

    select
    case $y<$Objekte[0][2]
    $y=$Objekte[0][2]
    $return=1
    endselect

    select
    case $y>$Objekte[0][4]-$Objekte[$number][4]
    $y= $Objekte[0][4]-$Objekte[$number][4]
    $return=1
    endselect

    Endswitch

    select
    case $Objekte[$number][6]<>0

    for $r=1 to $Objekte[0][0]

    select
    case $r <> $number and $Objekte[$r][0]<>"" and $Objekte[$r][6]<>0 and stringinstr($ausnahmen,$r)=0
    select
    case $x >= $Objekte[$r][1] + $Objekte[$r][3] or $Objekte[$r][1] >= $x + $Objekte[$number][3] or $y >= $Objekte[$r][2] + $Objekte[$r][4] or $Objekte[$r][2] >= $y + $Objekte[$number][4]
    case else
    $y=$Objekte[$number][2]
    $x=$Objekte[$number][1]
    $return=1
    endselect
    endselect
    next
    endselect


    switch $art
    case 1
    return $return
    case else
    local $koordinaten[3]
    $koordinaten[0]=$x
    $koordinaten[1]=$y
    $koordinaten[2]=$return
    return $koordinaten
    endswitch

    endfunc

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

    func _ObjectTouchAlt($number,$ausnahmen="",$richtung="",$pixel=0,$art=1)
    $x=$Objekte[$number][1]
    $y=$Objekte[$number][2]
    local $return=0

    if $richtung="x" Then
    $x=$x+$pixel
    endif

    if $richtung="y" Then
    $y=$y+$pixel
    EndIf

    if $Objekte[$number][6]=2 then

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

    if $x<$Objekte[0][1] then
    $x=$Objekte[0][1]
    $return=1
    endif

    if $x>$Objekte[0][3]-$Objekte[$number][3] then
    $x=$Objekte[0][3]-$Objekte[$number][3]
    $return=1
    endif


    if $y<$Objekte[0][2] then
    $y=$Objekte[0][2]
    $return=1
    EndIf

    if $y>$Objekte[0][4]-$Objekte[$number][4] then
    $y= $Objekte[0][4]-$Objekte[$number][4]
    $return=1
    endif

    EndIf

    if $Objekte[$number][6]<>0 then
    for $r=1 to $Objekte[0][0]
    if $r <> $number and $Objekte[$r][0]<>"" and $Objekte[$r][6]<>0 and stringinstr($ausnahmen,$r)=0 Then
    if $x >= $Objekte[$r][1] + $Objekte[$r][3] or $Objekte[$r][1] >= $x + $Objekte[$number][3] or $y >= $Objekte[$r][2] + $Objekte[$r][4] or $Objekte[$r][2] >= $y + $Objekte[$number][4] then
    Else
    $y=$Objekte[$number][2]
    $x=$Objekte[$number][1]
    $return=1
    endif
    endif
    next
    endif

    if $art=1 then
    return $return
    Else
    local $koordinaten[3]
    $koordinaten[0]=$x
    $koordinaten[1]=$y
    $koordinaten[2]=$return
    return $koordinaten
    endif
    endfunc

    [/autoit]

    2 Mal editiert, zuletzt von Padmak (11. Februar 2009 um 20:03)

  • Ich hab doch gesagt das ich sie selbst verbessert habe, da dein Code hier im Forum links Bündig angezeigt wurde und das unübersichtlich ist ;)
    Aber man merkt langsam das das programm immer mehr leistung braucht ^^

    Demnächst muss ich mal eine Ausfühlriche Anleitung in den ersten Post schreiben damit man schneller versteht, wie das ganze funktioniert.

  • Ok, im ersten Post gibt es nun eine Anleitung dazu, wie mein Script Funktioniert und was die einzelnen Funktionen machen.