So ich habe ein Problem mit meinem Spiel . Ich habe die Koordinaten in einer externen txt Datei abgespeichert sie werden ausgelesen + gesplittet und dann wenn man eine Taste drückt überprüft ob sie berührt werden. Nun habe ich aber ein Problem das spiel wird viel zu langsam so dass man es nicht mehr spielen will. :
Zwei Probleme :
- Sobald man ein Objekt berührt bleibt man darin stecken und es geht garnichts mehr
- Alles wird zu langsam
Skript :
Spoiler anzeigen
If _IsPressed("57") Then
$Touch1 = False
For $i = 1 to Ubound($Map_1,1)-1
$Splitted = StringSplit($Map_1[$i],",")
If _ObjectTouch($Splitted[1],$Splitted[2],$Splitted[3],$Splitted[4],$CharPosX,$CharPosY,45,41) = 1 Then
$Touch1 = True
EndIf
Next
If $Touch1 = False Then
GUICtrlSetPos($CharIn , $CharPosX , $CharPosY -2)
GUICtrlSetImage($CharIn,$Char4)
$CharPosX = $CharPosX
$CharPosY = $CharPosY - 2
EndIf
EndIf
If _IsPressed("53") Then
$Touch2 = False
For $i = 1 to Ubound($Map_1,1)-1
$Splitted = StringSplit($Map_1[$i],",")
If _ObjectTouch($Splitted[1],$Splitted[2],$Splitted[3],$Splitted[4],$CharPosX,$CharPosY,45,41) = 1 Then
$Touch2 = True
EndIf
Next
If $Touch2 = False Then
GUICtrlSetPos($CharIn , $CharPosX , $CharPosY +2)
GUICtrlSetImage($CharIn,$Char2)
$CharPosX = $CharPosX
$CharPosY = $CharPosY + 2
EndIf
EndIf
If _IsPressed("44") Then
$Touch3 = False
For $i = 1 to Ubound($Map_1,1)-1
$Splitted = StringSplit($Map_1[$i],",")
If _ObjectTouch($Splitted[1],$Splitted[2],$Splitted[3],$Splitted[4],$CharPosX,$CharPosY,45,41) = 1 Then
$Touch3 = True
EndIf
Next
If $Touch3 = False Then
GUICtrlSetPos($CharIn , $CharPosX + 2 , $CharPosY)
GUICtrlSetImage($CharIn,$Char)
$CharPosX = $CharPosX + 2
$CharPosY = $CharPosY
EndIf
EndIf
If _IsPressed("41") Then
$Touch4 = False
For $i = 1 to Ubound($Map_1,1)-1
$Splitted = StringSplit($Map_1[$i],",")
If _ObjectTouch($Splitted[1],$Splitted[2],$Splitted[3],$Splitted[4],$CharPosX,$CharPosY,45,41) = 1 Then
$Touch4 = True
EndIf
Next
If $Touch4 = False Then
GUICtrlSetPos($CharIn , $CharPosX - 2 , $CharPosY)
GUICtrlSetImage($CharIn,$Char3)
$CharPosX = $CharPosX - 2
$CharPosY = $CharPosY
EndIf
EndIf
Ich habe ein Include benutzt hier ist es :
Touch.au3 :
Spoiler anzeigen
#include <Array.au3>
;===========================================================================================================================================
;Name:_ObjectTouchUp
;Beschreibung: Überprüft ob die obere Seite eines Objekts ein anderes Objekt berührt.
;Parameter: $Stat_01: X Position von Objekt 1
; $Stat_02: Y Position von Objekt 1
; $Stat_03: Länge von Objekt 1
; $Stat_04: Höhe von Objekt 1
; $Stat2_01: X Position von Objekt 2
; $Stat2_02: Y Positon von Object 2
; $Stat2_03: Länge von Objekt 2
; $Stat2_04: Höhe von Objekt 2
;Return Values: Bei Berührung 1
; Ansonsten: 0
;Author:nof@ker
;===========================================================================================================================================
Func _ObjectTouchUp($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04)
$Ausmass1LeftStart=$Stat_01
$Ausmass1LeftEnd=$Stat_01+$Stat_03
$Ausmass1HeightStart=$Stat_02
$Ausmass1HeightEnd=$Stat_02+$Stat_04
$Ausmass2LeftStart=$Stat2_01
$Ausmass2LeftEnd=$Stat2_01+$Stat2_03
$Ausmass2HeightStart=$Stat2_02
$Ausmass2HeightEnd=$Stat2_02+$Stat2_04
$TouchLeft=False
$TouchHeight=False
For $i=$Ausmass1LeftStart to $Ausmass1LeftEnd
If $i=$Stat2_01 Then
$TouchLeft=True
EndIf
Next
For $i=$Ausmass1HeightStart to $Ausmass1HeightEnd
If $i=$Stat2_02 Then
$TouchHeight=True
EndIf
Next
If $TouchLeft=True and $TouchHeight=True Then
Return 1
Else
Return 0
EndIf
EndFunc
;===========================================================================================================================================
;Name:_ObjectTouchDown
;Beschreibung: Überprüft ob die untere Seite eines Objekts ein anderes Objekt berührt.
;Parameter: $Stat_01: X Position von Objekt 1
; $Stat_02: Y Position von Objekt 1
; $Stat_03: Länge von Objekt 1
; $Stat_04: Höhe von Objekt 1
; $Stat2_01: X Position von Objekt 2
; $Stat2_02: Y Positon von Object 2
; $Stat2_03: Länge von Objekt 2
; $Stat2_04: Höhe von Objekt 2
;Return Values: Bei Berührung 1
; Ansonsten: 0
;Author:nof@ker
;===========================================================================================================================================
Func _ObjectTouchDown($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04)
$Ausmass1LeftStart=$Stat_01
$Ausmass1LeftEnd=$Stat_01+$Stat_03
$Ausmass1HeightStart=$Stat_02
$Ausmass1HeightEnd=$Stat_02+$Stat_04
$Ausmass2LeftStart=$Stat2_01
$Ausmass2LeftEnd=$Stat2_01+$Stat2_03
$Ausmass2HeightStart=$Stat2_02
$Ausmass2HeightEnd=$Stat2_02+$Stat2_04
$TouchLeft=False
$TouchHeight=False
For $i=$Ausmass1LeftStart to $Ausmass1LeftEnd
If $i=$Stat2_01 Then
$TouchLeft=True
EndIf
Next
For $i=$Ausmass1HeightStart to $Ausmass1HeightEnd
If $i=$Ausmass2HeightEnd Then
$TouchHeight=True
EndIf
Next
If $TouchLeft=True and $TouchHeight=True Then
Return 1
Else
Return 0
EndIf
EndFunc
;===========================================================================================================================================
;Name:_ObjectTouchLeft
;Beschreibung: Überprüft ob die linke Seite eines Objekts ein anderes Objekt berührt.
;Parameter: $Stat_01: X Position von Objekt 1
; $Stat_02: Y Position von Objekt 1
; $Stat_03: Länge von Objekt 1
; $Stat_04: Höhe von Objekt 1
; $Stat2_01: X Position von Objekt 2
; $Stat2_02: Y Positon von Object 2
; $Stat2_03: Länge von Objekt 2
; $Stat2_04: Höhe von Objekt 2
;Return Values: Bei Berührung 1
; Ansonsten: 0
;Author:nof@ker
;===========================================================================================================================================
Func _ObjectTouchLeft($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04)
$Ausmass1LeftStart=$Stat_01
$Ausmass1LeftEnd=$Stat_01+$Stat_03
$Ausmass1HeightStart=$Stat_02
$Ausmass1HeightEnd=$Stat_02+$Stat_04
$Ausmass2LeftStart=$Stat2_01
$Ausmass2LeftEnd=$Stat2_01+$Stat2_03
$Ausmass2HeightStart=$Stat2_02
$Ausmass2HeightEnd=$Stat2_02+$Stat2_04
$TouchLeft=False
$TouchHeight=False
For $i=$Ausmass1LeftStart to $Ausmass1LeftEnd
If $i=$Ausmass2LeftStart Then
$TouchLeft=True
EndIf
Next
For $i=$Ausmass1HeightStart to $Ausmass1HeightEnd
For $j=$Ausmass2HeightStart to $Ausmass2HeightEnd
If $i=$j Then
$TouchHeight=True
EndIf
Next
Next
If $TouchLeft=True and $TouchHeight=True Then
Return 1
Else
Return 0
EndIf
EndFunc
;===========================================================================================================================================
;Name:_ObjectTouchRight
;Beschreibung: Überprüft ob die rechte Seite eines Objekts ein anderes Objekt berührt.
;Parameter: $Stat_01: X Position von Objekt 1
; $Stat_02: Y Position von Objekt 1
; $Stat_03: Länge von Objekt 1
; $Stat_04: Höhe von Objekt 1
; $Stat2_01: X Position von Objekt 2
; $Stat2_02: Y Positon von Object 2
; $Stat2_03: Länge von Objekt 2
; $Stat2_04: Höhe von Objekt 2
;Return Values: Bei Berührung 1
; Ansonsten: 0
;Author:nof@ker
;===========================================================================================================================================
Func _ObjectTouchRight($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04)
$Ausmass1LeftStart=$Stat_01
$Ausmass1LeftEnd=$Stat_01+$Stat_03
$Ausmass1HeightStart=$Stat_02
$Ausmass1HeightEnd=$Stat_02+$Stat_04
$Ausmass2LeftStart=$Stat2_01
$Ausmass2LeftEnd=$Stat2_01+$Stat2_03
$Ausmass2HeightStart=$Stat2_02
$Ausmass2HeightEnd=$Stat2_02+$Stat2_04
$TouchLeft=False
$TouchHeight=False
For $i=$Ausmass1LeftStart to $Ausmass1LeftEnd
If $i=$Ausmass2LeftEnd Then
$TouchLeft=True
EndIf
Next
For $i=$Ausmass1HeightStart to $Ausmass1HeightEnd
For $j=$Ausmass2HeightStart to $Ausmass2HeightEnd
If $i=$j Then
$TouchHeight=True
EndIf
Next
Next
If $TouchLeft=True and $TouchHeight=True Then
Return 1
Else
Return 0
EndIf
EndFunc
;===========================================================================================================================================
;Name:_ObjectinObject
;Beschreibung: Überprüft ob ein Objekt in einem anderen Objekt liegt.
;Parameter: $Stat_01: X Position von Objekt 1
; $Stat_02: Y Position von Objekt 1
; $Stat_03: Länge von Objekt 1
; $Stat_04: Höhe von Objekt 1
; $Stat2_01: X Position von Objekt 2
; $Stat2_02: Y Positon von Object 2
; $Stat2_03: Länge von Objekt 2
; $Stat2_04: Höhe von Objekt 2
;Return Values: Bei Ineinanderliegen 1
; Ansonsten: 0
;Author:nof@ker
;===========================================================================================================================================
Func _ObjectinObject($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04)
$Ausmass1LeftStart=$Stat_01
$Ausmass1LeftEnd=$Stat_01+$Stat_03
$Ausmass1HeightStart=$Stat_02
$Ausmass1HeightEnd=$Stat_02+$Stat_04
$Ausmass2LeftStart=$Stat2_01
$Ausmass2LeftEnd=$Stat2_01+$Stat2_03
$Ausmass2HeightStart=$Stat2_02
$Ausmass2HeightEnd=$Stat2_02+$Stat2_04
$TouchX=False
$TouchY=False
For $i=$Ausmass1LeftStart to $Ausmass1LeftEnd
For $j=$Ausmass2LeftStart to $Ausmass2LeftEnd
If $i=$j Then
$TouchX=True
EndIf
Next
Next
For $i=$Ausmass1HeightStart to $Ausmass1HeightEnd
For $j=$Ausmass2HeightStart to $Ausmass2HeightEnd
If $i=$j Then
$TouchY=True
EndIf
Next
Next
If $TouchX and $TouchY = True Then
Return 1
Else
Return 0
EndIf
EndFunc
Func _ObjectTouch($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04)
$Ret=0
If _ObjectTouchUp($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04) = 1 Then
$Ret=1
EndIf
If _ObjectTouchDown($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04) = 1 Then
$Ret=1
EndIf
If _ObjectTouchLeft($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04) = 1 Then
$Ret=1
EndIf
If _ObjectTouchRight($Stat_01,$Stat_02,$Stat_03,$Stat_04,$Stat2_01,$Stat2_02,$Stat2_03,$Stat2_04) = 1 Then
$Ret=1
EndIf
Return $Ret
EndFunc ;ObjectTouch