2D Spiel Hilfe

  • also jetzt ist es top^^
    vor allem die dokumentation :D
    trotzdem kann es sein dass du meinen letzten geschwindigkeitstest übersehen hast? :D

    Padmak

  • Stimmt, hab ich glatt übersehen, und als ich es geschrieben habe hatte ich sogar noch daran gedacht es vieleicht alles in ein select zu packen, habs dann aber nicht gemacht weil ich nicht wusste ob es was bringt^^
    Das Werd ich auf jeden fall in der nächsten Version verbessern.
    Vieleicht bau ich mir jetzt erstmal einen kleinen Editor, damit man die Objekte einfacher setzten kann, mal schaun.

    Achja, habe noch eine Frage:
    Gibt es einen Geschwindigkeits unterschied zwischen arrays und structs?
    Und wenn ja, welches ist schneller? ;)

    • Offizieller Beitrag

    Gibt es einen Geschwindigkeits unterschied zwischen arrays und structs?
    Und wenn ja, welches ist schneller? ;)


    Habs jetzt mal getestet, hier das Skript:

    Spoiler anzeigen
    [autoit]

    ; Vergleichstest Array vs. Structs

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

    Global $testStruct1 = DllStructCreate("int;int;int;int;int;int;int;int;int;int")
    Global $testStruct2 = DllStructCreate("int a[5];int b[5];int c[5];int d[5];int e[5];int f[5];int g[5];int h[5];int i[5];int j[5]")
    Global $array1[10]
    Global $array2[10][5]
    Global $aRandom
    Global $start, $t, $sumStr1 = 0, $sumStr2 = 0, $sumAr1 = 0, $sumAr2 = 0
    Global $runs = 100
    For $i = 1 To $runs
    $aRandom = _GetRandomVal(10)
    $start = TimerInit()
    _SetStruct1($aRandom)
    _GetStruct1()
    $t = TimerDiff($start)
    ConsoleWrite('$t_s1 = ' & $t & @crlf)
    $sumStr1 += $t
    $start = TimerInit()
    _SetArray1($aRandom)
    _GetArray1()
    $t = TimerDiff($start)
    ConsoleWrite('$t_a1 = ' & $t & @crlf)
    $sumAr1 += $t

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

    $aRandom = _GetRandomVal(50)
    $start = TimerInit()
    _SetStruct2($aRandom)
    _GetStruct2()
    $t = TimerDiff($start)
    ConsoleWrite('$t_s2 = ' & $t & @crlf)
    $sumStr2 += $t
    $start = TimerInit()
    _SetArray2($aRandom)
    _GetArray2()
    $t = TimerDiff($start)
    ConsoleWrite('$t_a2 = ' & $t & @crlf& @crlf)
    $sumAr2 += $t
    Next

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

    ConsoleWrite(@CRLF & 'Durchschnittszeiten Schreiben + Lesen' & @CRLF)
    ConsoleWrite('Struct 1: ' & @TAB & $sumStr1/$runs & @CRLF)
    ConsoleWrite('Array 1: ' & @TAB & $sumAr1/$runs & @CRLF)
    ConsoleWrite('Struct 2: ' & @TAB & $sumStr2/$runs & @CRLF)
    ConsoleWrite('Array 2: ' & @TAB & $sumAr2/$runs & @CRLF)

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

    Func _GetRandomVal($i)
    Local $aRandom[$i]
    For $i = 0 To UBound($aRandom) -1
    $aRandom[$i] = Random(100, 10000, 1)
    Next
    Return $aRandom
    EndFunc

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

    Func _SetStruct1(ByRef $aRandom)
    For $i = 1 To 10
    DllStructSetData($testStruct1, $i, $aRandom[$i-1])
    Next
    EndFunc

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

    Func _SetStruct2(ByRef $aRandom)
    $k = 0
    For $i = 1 To 10
    For $j = 1 To 5
    DllStructSetData($testStruct2, $i, $aRandom[$k], $j)
    $k += 1
    Next
    Next
    EndFunc

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

    Func _GetStruct1()
    For $i = 1 To 10
    ConsoleWrite(DllStructGetData($testStruct1, $i) & @CRLF)
    Next
    EndFunc

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

    Func _GetStruct2()
    For $i = 1 To 10
    For $j = 1 To 5
    ConsoleWrite(DllStructGetData($testStruct2, $i, $j) & @CRLF)
    Next
    Next
    EndFunc

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

    Func _SetArray1(ByRef $aRandom)
    For $i = 0 To 9
    $array1[$i] = $aRandom[$i]
    Next
    EndFunc

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

    Func _SetArray2(ByRef $aRandom)
    $k = 0
    For $i = 0 To 9
    For $j = 0 To 4
    $array2[$i][$j] = $aRandom[$k]
    $k += 1
    Next
    Next
    EndFunc

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

    Func _GetArray1()
    For $i = 0 To 9
    ConsoleWrite($array1[$i] & @CRLF)
    Next
    EndFunc

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

    Func _GetArray2()
    For $i = 0 To 9
    For $j = 0 To 4
    ConsoleWrite($array2[$i][$j] & @CRLF)
    Next
    Next
    EndFunc

    [/autoit]


    Es siegt das Array :)

  • Das sind ja mal gute Neuigkeiten :thumbup:

    Ich habe eben einen kleinen Bugg entdeckt, und zwar bezieht sich die _ObjektCreate() Koordinaten immer noch auf die gesammte GUI Oberfläche und nicht auf den Bereich der mit _SetPlayingField() definiert wurde. Hab das Problem aber schon gelöst ;)

    Funktionen die demnächst noch kommen:
    _TeleportObjectGroup()
    _SetObjectSize()
    _SetObjectGroupSize()
    _SetObjectPicture()

  • Und es geht weiter:

    Ich habe einen haufen neuer/kleiner Funktionen geschrieben, überblick:

    Spoiler anzeigen

    ;==============================================Funktionen====================================
    ; _SetPlayingField()

    ; _CreateObject()
    ; _MoveObject()
    ; _ObjectTouch()
    ; _DeleteObject()
    ; _ObjectTouchClass()
    ; _GetObjectPosition()
    ; _TeleportObject()
    ; _ObjectSetPicture()
    ; _ObjectSetClass()
    ; _ObjectSetTyp()
    ; _ObjectTouchObject()
    ; _SetObjectSize()

    ; _SetObjectGroup()
    ; _MoveObjectGroup()
    ; _ObjectGroupTouch()
    ; _ObjectTouchObjectGroup()
    ; _ObjectGroupTouchClass()
    ; _GetObjectGroup()
    ; _DeleteObjectGroup()
    ; _GetObjectGroupString()
    ; _GetObjectGroupArray()
    ; _TeleportObjectGroup()
    ; _GetObjectGroupPosition()
    ; _ObjectGroupSetPicture()
    ; _ObjectGroupSetClass()
    ; _ObjectGroupSetTyp()


    ;==============================================Funktionen====================================

    Manche Funktionen konnte ich aber noch nicht testen, da ich sie noch nicht benötigt habe.

    Dafür geht es auch beim Spiel weiter:
    Ich habe einen Hebel hinzugefügt!

    Hier noch ein aktueller Screen:
    autoit.de/wcf/attachment/3933/

    Den Download gibts im ersten post.

    MfG Oger-Lord

  • Ich habs bei mir mal ausgiebig getestet:

    Spoiler anzeigen

    Test 3 und 4 unterscheiden sich nur minimal.
    Ihr könnt ja auch mal das Script testen ^^

  • Ich hab heute das Script endlich auf autoitscript.com präsentiert, da ich heute endlich meine 5 posts gesammelt habe um in den Example Scripts berreich posten zu können ;)

    Ich wüsste zur Zeit nicht viel, was ich an meinen Funktionenn noch ändern könnte, vieleicht bei ein paar das if ersetzten und das wars.
    Ansonsten könnte ich vieleicht noch eine _SetObjectGroupSize() function machen, aber ich hätte keine Ahnung wie ich das umsetzten sollte.
    Denn dadurch das alle Bilder verkleinert werden, verändert sich ja auch ihre Position zueinander.

  • So, ich habe jetzt einen kleinen Editor geschrieben, mit der man Objekte platztieren und verschieben kann. Das ganze ist amer noch ziemlich unfertig aber zur Zeit weiß ich noch nicht, wie nützlich das ganze im endeffekt sein wird....

    autoit.de/wcf/attachment/3983/


    So, hier gibts alle 3 Scripte: (Jump&Run, Editor und die benötigte GameHelperUDF)

  • Fehler beim Editor:

    Zitat

    Line 374 (File "D:\Files\AUTOIT\STOLEN\Jump&Run\editor.au3"):

    local $picHeight = int($picgrosse[4])
    local $picHeight = int(^ ERROR

    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.

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

  • Hallo!
    Erstmal großes Lob an Olger-Lord ! Das Spiel ist echt gut geworden, es wäre aber noch toll, wenn der Hebel die Kisten danach auch wieder verschwinden lassen kann.

    MfG tobi_girst

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • Muss man diesen Olger-Lord kennen? ?(

    Hm, aber erstmal müsste ich mit jemanden zusammen der XP hat ein Script entwickeln, wodurch man die Infos von einer Datei immer richtig auslesen kann, egal ob man windows xp oder vista hat....

    Oder funktioniert diese Funktion 100% bei jedem XP benutzter?

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: GetExtProperty($sPath,$iProp)
    ; Description: Returns an extended property of a given file.
    ; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from.
    ; $iProp - The numerical value for the property you want returned. If $iProp is is set
    ; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
    ; The properties are as follows:
    ; Name = 0
    ; Size = 1
    ; Type = 2
    ; DateModified = 3
    ; DateCreated = 4
    ; DateAccessed = 5
    ; Attributes = 6
    ; Status = 7
    ; Owner = 8
    ; Author = 9
    ; Title = 10
    ; Subject = 11
    ; Category = 12
    ; Pages = 13
    ; Comments = 14
    ; Copyright = 15
    ; Artist = 16
    ; AlbumTitle = 17
    ; Year = 18
    ; TrackNumber = 19
    ; Genre = 20
    ; Duration = 21
    ; BitRate = 22
    ; Protected = 23
    ; CameraModel = 24
    ; DatePictureTaken = 25
    ; Dimensions = 26
    ; Width = 27
    ; Height = 28
    ; Company = 30
    ; Description = 31
    ; FileVersion = 32
    ; ProductName = 33
    ; ProductVersion = 34
    ; Requirement(s): File specified in $spath must exist.
    ; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties
    ; On Failure - 0, @Error - 1 (If file does not exist)
    ; Author(s): Simucal ([email='Simucal@gmail.com'][/email])
    ; Note(s):
    ;
    ;===============================================================================
    Func _GetExtProperty($sPath, $iProp)
    Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
    $iExist = FileExists($sPath)
    If $iExist = 0 Then
    SetError(1)
    Return 0
    Else
    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
    $oShellApp = ObjCreate ("shell.application")
    $oDir = $oShellApp.NameSpace ($sDir)
    $oFile = $oDir.Parsename ($sFile)
    If $iProp = -1 Then
    Local $aProperty[35]
    For $i = 0 To 34
    $aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i)
    Next
    Return $aProperty
    Else
    $sProperty = $oDir.GetDetailsOf ($oFile, $iProp)
    If $sProperty = "" Then
    Return 0
    Else
    Return $sProperty
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_GetExtProperty

    [/autoit]

  • Ich find das Projekt immernoch toll. *push*

    Wie wäre es mit einer zweiten Art davon? Siehe Mario: Spielfigur in der Mitte "festgenagelt" und die Umgebung bewegt sich?

    Level-/Punktesystem wären bestimmt auch interessant. ^^

    Übrigens hat das mit den unsauberen Kollisionen nichts mit der veränderten Geschwindigkeit zu tun. Auch ohne die Modifizierung kollidiert er nicht perfekt. In der neuesten Version kommt er bei den vertikalen Kistenstapel ganz links nicht einmal nach langem drücken ran.

    Deine neuen Funktionen finde ich spitze. =)

    Ich werde mich mal in deinen Code reinlesen.

  • Doch, es hat was mit der Geschwindigkeit zu tun. Wenn du dich mit 4 pixeln geschwindigkeit bewegst und dann einen schritt zu wand machst und einen pixel in der Wand drinnen bist dann wird dieser schritt nicht geweret und du bleibst 3 pixel vor der Wand stehen.
    Tja, an das verschieben der Umgebung hatte ich auch schon gedacht, aber ich weiß noch nciht wie ich es außerhalb des aktuellen fensters machensoll....ich könnte die ganzen Bilder auch außerhalb des Fensters erstellen und man sieht sie nur, wenn sie ins fenster kommen.....
    Wobei, dafür könnte ich vieleicht noch eine extra funktion einbauen.....mal schaun.