1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. James

Beiträge von James

  • mp3 zusammenfügen

    • James
    • 27. August 2012 um 09:56

    Zu 2) den 3. Parameter von Run() auf @SW_HIDE setzen.
    Zu 1) Versuch's mal mit "*.mp3" und "alle.mp3", es ging bei mir vorhin auch nicht ohne "" (fann musst du den ganzen String allerdings in 'einfache Anführungszeichen' setzen).

  • RegDelete alle Werte mit beinhaltetem Namen

    • James
    • 27. August 2012 um 09:34

    Versuch's doch mal mit einer Kombination der folgenden Befehle:

    [autoit]

    RegEnumVal und/oder RegEnumKey
    For
    StringLeft
    RegDelete

    [/autoit]

    MfG, James

  • mp3 zusammenfügen

    • James
    • 27. August 2012 um 09:20

    Die Länge passt (6:20 errechnet und 6:28 in WMP) und Tags hatten die ursprünglichen Dateien nicht.

    Edit: Vielleicht ist bei mp3-Playern die Fehlertoleranz mittlerweile genauso groß wie in Browsern.

  • mp3 zusammenfügen

    • James
    • 27. August 2012 um 09:16

    funkey Ich bin auch überrascht, und obwohl das eigentlich wirlich nicht gehen sollte, habe ich das gerade getestet und sogar der Windows Media Player spielt wirklich beide Lieder ab.

  • mp3 zusammenfügen

    • James
    • 27. August 2012 um 09:08

    1) Verwende bitte, wenn möglich, Run() statt ShellExecute().
    2) Deine Idee müsste so funktionieren:

    [autoit]

    Run(@ComSpec & " /c copy /b *.mp3 + alle.mp3", @ScriptDir)

    [/autoit]
  • TCP Frage

    • James
    • 27. August 2012 um 00:17

    Im Server reicht UDPBind, UDPOpen brauchst du nicht. Du hast in beiden Skripten UDPShutdown vergessen, in dem Client sogar UDPStartup.

  • TCP Frage

    • James
    • 26. August 2012 um 23:25
    Zitat von chesstiger

    Sh.... ich werde echt alt.
    Hätte mir eigentlich sofort auffallen müssen... :S


    Ach, das kannst du doch super durch die aktuelle Uhrzeit entschuldigen. :D

  • TCP Frage

    • James
    • 26. August 2012 um 23:17

    Das Problem liegt wahrscheinlich darin, dass du in _RecvPosition() TCP und den Server jedes mal neustartest, und _RecvPosition() in einer Endlosschleife aufgerufen wird. Der Server ist zwar allgemein nicht optimal gelöst, aber TCPStartup und TCPListen an den Anfang des Skriptes zu verlagern sollte für den Anfang reichen.

    Für Spiele (besonders, wenn es dann mehrere Clients sind), würde ich dir UDP empfehlen. Das würde den Server (und auch die Clients) enorm vereinfachen.

    MfG, James

  • Fraktale: BASIC --> AutoIt

    • James
    • 26. August 2012 um 22:31

    Danke, ich schau' mir das morgen mal genauer an. :)

  • Fraktale: BASIC --> AutoIt

    • James
    • 26. August 2012 um 21:11

    "Endianess" - Ja, schon mal gehört. ;)
    Du sagst, dass dieses "Problem" bei BYTE und CHAR nicht auftritt, wenn ich das richtig verstehe? Genau das benutze ich aber in dem Beispiel in Post #11.

    Zu SetPixel: Ich habe kein Problem damit, bei den Farben umzudenken, weshalb ich das (aus Faulheit) noch nicht geändert habe. Aber wahrscheinlich baue ich das die nächsten Tage mal ein, dass die anderen (falls es bei der UDF überhaupt andere Benutzer gibt) wie gewohnt weiter arbeiten können. ^^

  • Fraktale: BASIC --> AutoIt

    • James
    • 26. August 2012 um 20:09
    Zitat von Andy

    Hi,
    SetPixel() ist die denkbar langsamste Lösung, um komplette Grafiken zu zeichnen.
    Wenn diese Fraktale so langsam sind, wieso dann die wirklich einfachen Formeln nicht inline per Assembler, als DLL per FreeBasic, als 5-Zeiler in einem OpenCl-Kernel oder wie Marsi vorgeschlagen hat, per Schreiben in eine Bitmap-DllStruct beschleunigen.
    Wenn ich das so sehe, denke ich an einen "wie geht es am langsamsten"-Contest^^

    So könnte man das auch sehen. Ich werde es schon noch schaffen, die von minx gemessenen 0.5 FPS zu unterbieten... :thumbup:

    Aber mal ernsthaft: Die Geschwindigkeit von Hopalong reicht meiner Meinung nach, wenn es schneller wäre, würde man die "Animation" nicht mehr so wahrnehmen. Das Lava Beispiel finde ich zwar nicht so gut, aber spätestens bei dem nächsten guten Fraktal werde ich mal versuchen, eure Performance-Tipps umzusetzen.

    MfG, James

    Edit: OnEventMode eingebaut.
    Andy Du weist doch sicherlich, warum SetPixel laut MSDN RGB verwendet, wir hier unsere Farben in BGR angeben müssen, oder? Kann es sein, dass wie in Structs die Bytes "vertauscht" werden (wenn ich z.B. 0xCAFE in "byte[2]" schreibe und dann wieder auslese kommt ja 0xFECA raus)?

  • Fraktale: BASIC --> AutoIt

    • James
    • 26. August 2012 um 20:01
    Zitat von Mars

    Ein Beispiel dafür ist der OnEventMode.
    Damit kannst du das Skript jederzeit beenden, ohne irgendwelche Ispressed Abfragen oder GuiGetMsg.

    Kenne ich, könnte ich auch noch einbauen (habe ich eingebaut), aber dann könnte ich ja auch gleich das ganze Skript optimieren, und ich wollte ja, dass zwischen den beiden Skripten so wenig Unterschied wie möglich ist. ;)

    Zitat von Mars

    Dann ist es unglaublich langsam per GDI und SetPx einen Pixel zu färben.
    Per Bitmap und DllstructSetData geht das locker 10x so schnell. (Allerdings habe ich beim Lava Beispiel festgestellt, dass dann die Farben teils misinterpretiert werden. einfach mal mit Bitshift rumspielen und das Problem ist erledigt).

    Das hat zwar nichts mehr mit "AutoIt Basics" zu tun, sondern eher mit dem Aufbau einer Bitmap, aber trotzdem danke für den Tipp. Das Problem mit den Farben, dass du bemerkt hast, könnte damit zu tun haben, das bei SetPixel Farben anscheinend im BGR-Format verarbeitet werden (oder, dass die Bytes beim DllCall vertauscht werden, da bin ich mir noch nicht sicher).

    MfG, James

  • Massenphänomen - Slender

    • James
    • 26. August 2012 um 17:38

    Ich finde das Spiel nicht besonders gut, und wie doch schon sagst, eigentlich überhaupt nicht gruselig
    (selbst mit Ton; dieses Video macht mir ehrlich gesagt mehr Angst als das Spiel).

    Und auch wenn die Story schon relativ schlecht (oder vielleicht auch nur simpel) ist,
    so hätte man zumindest die Umsetzung besser machen können.
    Ich finde meistens 3 Seiten, aber auch nur, weil der RNG,
    der die Seiten eigentlich zufällig platzieren sollte, meistens überhaupt nicht funktioniert.

    Zu der Frage, was ein gutes Horrorspiel ausmacht:
    - es sollte zumindest ein bisschen Horror enthalten
    - es sollte eine Story haben
    - alle anderen Kritikpunkte, die einem bei Slender so einfallen

    MfG, James

  • HTML-Spielerei mit Ko Kai

    • James
    • 26. August 2012 um 09:54

    Wie minx schon sagte: Spam.
    Es kann dadurch auch passieren, dass Teile der eigentlichen Seite fehlen, wenn man sowas zu oft in einem Post verwendet (z.B. die Kommentarfunktion)...

  • Fraktale: BASIC --> AutoIt

    • James
    • 26. August 2012 um 00:00

    Die UDF in Post #1 wurde überarbeitet und wir können mit dem 2. Beispiel beginnen.
    Vorher aber noch ein Dank an Jojo aus dem deutschen QBasic- und FreeBASIC-Forum, der wesentlich zu der Portierung einzelner BASIC-Befehle beigetragen hat.

    Dieses Fraktal sieht in QBASIC (Code von minx) so aus:

    Code
    DEFINT A-Z
    SCREEN 13
    DIM SHARED sins(3600) AS INTEGER
    DIM SHARED rands(18000) AS INTEGER
    FOR n = 0 TO 21856
    	IF n < 18001 THEN
    		rands(n) = RND * 32
    	ELSE IF n < 21601 THEN
    		sins(n - 18000) = 256 * SIN((n - 18000) * .0349)
    	ELSE IF n < 21729 THEN
    		PALETTE n - 21601, ((n - 21601) \ 2) * 65793
    	ELSE
    		PALETTE 255 - (n - 21729), ((n - 21729) \ 2) * 65793
    	END IF
    NEXT n
    DEF SEG = &HA000
    DO
    	f = (f + 2) MOD 180
    	f2 = (f2 + 2) MOD 50
    	p& = 0
    	FOR r = 0 TO 199
    		FOR c = 0 TO 319
    			POKE p& + c, sins(r + f) + sins(c + f) + sins(r + c) + rands(f2 * r + c)
    		NEXT c
    		p& = p& + 320
    	NEXT r
    LOOP UNTIL INKEY$ <> ""
    Alles anzeigen


    Meine Umsetzung in AutoIt sieht so aus:

    [autoit]

    #NoTrayIcon
    #include "BASIC.au3"

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

    Local $sins[3601]
    Local $rands[18001]

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

    Local $n
    For $n = 0 To 21856
    If ($n < 18001) Then
    $rands[$n] = Random() * 32
    ElseIf ($n < 21601) Then
    $sins[$n - 18000] = 256 * Sin( ($n - 18000) * .0349 )
    ElseIf ($n < 21729) Then
    PALETTE( ($n - 21601), ( ($n - 21601) / 2 ) * 65793 )
    Else
    PALETTE( (255 - ($n - 21729)), ( ($n - 21729) / 2 ) * 65793 )
    EndIf
    Next

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

    Local $f = 0, $f2 = 0, $p, $r, $c
    Do
    $f = Mod( ($f + 2), 180)
    $f2 = Mod( ($f2 + 2), 50)
    $p = 0
    For $r = 0 To 199
    For $c = 0 To 319
    PLOT($c-160, $r-100, ($sins[$r + $f] + $sins[$c + $f] + $sins[$r + $c] + $rands[$f2*$r + $c]) )
    Next
    Next
    Until False

    [/autoit]


    An dieser Stelle wieder ein paar Anmerkungen:
    - da in BASIC Arrays bei 1 beginnen, wurde aus "sins(3600)" einfach "$sins[3601]", das Gleiche gilt natürlich auch für "rands"
    - es werden zwar Daten in die Palette geschrieben, aber nie welche ausgelesen
    -> das Skript funktioniert trotzdem
    - POKE habe ich zwar implementiert, im Beispiel aber durch PLOT ersetzt
    - die Überprüfung mit GUIGetMsg() sollte eigentlich in die innere For-Schleife, da man das Skript sonst nicht mehr beenden kann
    -> dadurch würde das Skript aber noch viel langsamer werden, als es sowieso schon ist (es ist auch überhaupt nicht optimiert)

    So, das war's auch schon wieder. Ich bitte weiterhin um Kommentare.

    MfG, James

  • (GDI) Hopalong Fraktal

    • James
    • 25. August 2012 um 23:16

    Wow, cool! :thumbup:

  • Fraktale: BASIC --> AutoIt

    • James
    • 25. August 2012 um 13:21
    Zitat von minx

    Hatte mir die UDF nicht runtergeladen. Also das von Marsi bringt einen ziemlichen Geschwindigkeitsboost.

    Ne, für mich ging aus dem AutoIt Beispiel nicht hervor, was die Funktionen beinhalten :D


    Na dann ist ja gut, obwohl du schon mal auf den Spoiler hättest klicken können. ;)

  • Fraktale: BASIC --> AutoIt

    • James
    • 25. August 2012 um 12:59
    Zitat von minx

    Wei Mars schon gesagt hat, kannst du SGN durch einfach: (($x>0)-($x<0)) ersetzen ;)

    Kann ich ja noch machen, ist aber auch ziemlich egal im Moment.

    Zitat von minx

    Als Standerd für die PLOT / PIXEL Funktion, die desweiteren auch auch PSET heißt würde ich schon einen kleinen GDI Befehl einbauen.

    SetPixel ist doch GDI, oder was meinst du?

    Zitat von minx

    Du solltest unbedingt die BASIC Version angeben. Ganz witzig wäre nämlich mal ein kleiner Assistent für das Übersetzen von Microsofts QBASIC, weil man damit sehr sehr einfach sehr komplexe Grafiken erzeugen kann, und warum das Rad neu erfinden :whistling:

    Ich weis nicht, welche BASIC Version die auf der Seite verwenden, es ging mir aber auch nur darum, so einfach wie möglich in AutoIt Fraktale erstellen zu können. Um QBASIC zu ersetzen müsste man ja wahrscheinlich auch alle in AutoIt fehlenden Funktionen nachbauen, also mache ich doch momentan nichts anderes, oder?

    Zitat von minx

    Ich hab vergessen zu erwähnen das du bei der GDI.dll auch vorher das Handle abfragen musst.

    ?

    Zitat

    Ich würde auch IDLE() durch

    Do
    until guigetmsg()=-3

    ersetzen oder OnEvents verwenden.

    Und weiter? Genau das macht IDLE doch?!

  • Fraktale: BASIC --> AutoIt

    • James
    • 25. August 2012 um 12:18

    Während minx letzte Nacht an dem Hopalong Fraktal gearbeitet hat, habe ich, wie auch schon in der Shoutbox angekündigt, eine kleine UDF geschreiben, um Fraktale von BASIC fast 1:1 in AutoIt übernehmen zu können.

    BASIC.au3
    [autoit]

    #include-once
    ; BASIC.au3 by James1337
    ; thanks to Jojo (forum.qbasic.at)

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

    AutoItSetOption("GUIOnEventMode", 1)

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

    Global $PLOT[3] = [False, -1, -1]
    Func PLOT($x, $y, $color=0xFFFFFF, $gdi32="gdi32.dll")
    If $PLOT[0] Then
    SetPixel($PLOT[2], $x+320, $y+240, $color, $gdi32)
    Else
    $PLOT[0] = True
    $PLOT[1] = GUICreate("BASIC", 640, 480)
    GUISetOnEvent(-3, "ExitB", $PLOT[1])
    GUISetBkColor(0x000000, $PLOT[1])
    GUISetState(@SW_SHOW, $PLOT[1])
    $PLOT[2] = GetDC($PLOT[1])
    PLOT($x, $y, $color, $gdi32)
    EndIf
    EndFunc
    Func IDLE()
    While Sleep(10)
    WEnd
    EndFunc
    Func ExitB()
    Exit
    EndFunc

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

    Func POKE($address, $color, $screenwidth=320, $gdi32="gdi32.dll")
    PLOT(Mod($address, $screenwidth), ($address / $screenwidth), $color, $gdi32)
    EndFunc

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

    Global $PALETTE[256]
    Func PALETTE($x, $y)
    Local $R = Mod($y, 64) * 4
    Local $G = Mod(($y / 256), 64) * 4
    Local $B = Mod(($y / 65536), 64) * 4
    $PALETTE[$x] = "0x" & Hex($B, 2) & Hex($G, 2) & Hex($R, 2)
    EndFunc

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

    Func SIGN($x)
    Return ( ($x > 0) - ($x < 0) )
    EndFunc ; by Mars

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

    Func GetDC($hWnd, $user32="user32.dll")
    $DC = DllCall($user32, "int", "GetDC", "hwnd", $hWnd)
    If @error Then Return SetError(@error, 0, -1)
    Return $DC[0]
    EndFunc

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

    Func SetPixel($hdc, $X, $Y, $Color, $gdi32="gdi32.dll")
    DllCall($gdi32, "long", "SetPixel", "long", $hdc, "long", $X, "long", $Y, "long", $Color)
    EndFunc

    [/autoit]

    Da wir uns beide zufällig Hopalong ausgesucht haben nehme ich das hier auch gleich als Beispiel:

    Zitat von http://www.fraktalwelt.de/myhome/simpiter2.htm
    Code
    INPUT num
    INPUT a, b, c
    x = 0
    y = 0
    PLOT(x, y)
    FOR i = 1 TO num
    xx = y - SIGN(x) * [ABS(b*x - c)]^0.5
    yy = a - x
    x = xx
    y = yy


    In AutoIt sieht das dann so aus:

    [autoit]

    #NoTrayIcon
    #include "BASIC.au3"

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

    Local $num, $a, $v, $c, $x, $y, $xx, $yy

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

    $num = InputBox("", "num", 50000)
    $a = InputBox("", "a", 94)
    $b = InputBox("", "b", 58)
    $c = InputBox("", "c", -99)
    $x = 0
    $y = 0

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

    For $i = 1 To $num
    $xx = $y - SIGN($x) * Sqrt(Abs($b*$x - $c))
    $yy = $a - $x
    $x = $xx
    $y = $yy
    PLOT($x, $y, 0xFF*$i)
    Next
    IDLE()

    [/autoit]


    Wie man sieht, besteht da kein großer Unterschied.
    - aus Variable wurde $Variable (was man sich in der neuen Beta auch sparen kann)
    - aus INPUT wurde InputBox und die Syntax ist leicht anders
    - aus ^0.5 wurde Sqrt(), was aber eigentlich das Gleiche ist
    - PLOT() steht jetzt in der For-Schleife
    - damit sich das Fenster nicht sofort wieder schließt, wurde IDLE() eingefügt
    Man könnte jetzt natürlich noch Farben einbauen (siehe 3. Parameter von PLOT, wobei die Farbe das Format 0xBBGGRR hat) und gdi32.dll mit DllOpen/DllClose verwenden (siehe 4. Parameter von PLOT), aber so im Großen und Ganzen funktioniert es ja.

    MfG, James

    PS: Fall jemand noch Funktionen hat (oder kennt), die in diese UDF passen würden, hinterlasst einfach einen Kommentar. :)

  • (GDI) Hopalong Fraktal

    • James
    • 25. August 2012 um 09:50

    Wow, das ist wirklich gut geworden. :thumbup:

    MfG, James

    PS: 94 | 58 | -99 sieht auch gut aus, erinnert mich irgendwie an Neuronen.^^

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™