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).
Beiträge von James
-
-
Versuch's doch mal mit einer Kombination der folgenden Befehle:
[autoit]RegEnumVal und/oder RegEnumKey
[/autoit]
For
StringLeft
RegDeleteMfG, James
-
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.
-
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.
-
1) Verwende bitte, wenn möglich, Run() statt ShellExecute().
[autoit]
2) Deine Idee müsste so funktionieren:Run(@ComSpec & " /c copy /b *.mp3 + alle.mp3", @ScriptDir)
[/autoit] -
Im Server reicht UDPBind, UDPOpen brauchst du nicht. Du hast in beiden Skripten UDPShutdown vergessen, in dem Client sogar UDPStartup.
-
Sh.... ich werde echt alt.
Hätte mir eigentlich sofort auffallen müssen...
Ach, das kannst du doch super durch die aktuelle Uhrzeit entschuldigen. -
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
-
Danke, ich schau' mir das morgen mal genauer an.
-
"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.
-
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...
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)? -
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.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
-
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 einfallenMfG, James
-
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)... -
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
Alles anzeigenDEFINT 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$ <> ""
[autoit]
Meine Umsetzung in AutoIt sieht so aus:#NoTrayIcon
[/autoit][autoit][/autoit][autoit]
#include "BASIC.au3"Local $sins[3601]
[/autoit][autoit][/autoit][autoit]
Local $rands[18001]Local $n
[/autoit][autoit][/autoit][autoit]
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
NextLocal $f = 0, $f2 = 0, $p, $r, $c
[/autoit]
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
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
-
Wow, cool!
-
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
Na dann ist ja gut, obwohl du schon mal auf den Spoiler hättest klicken können. -
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.
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?
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
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?
Ich hab vergessen zu erwähnen das du bei der GDI.dll auch vorher das Handle abfragen musst.
?
ZitatIch würde auch IDLE() durch
Do
until guigetmsg()=-3ersetzen oder OnEvents verwenden.
Und weiter? Genau das macht IDLE doch?!
-
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
[/autoit] [autoit][/autoit] [autoit]
; BASIC.au3 by James1337
; thanks to Jojo (forum.qbasic.at)AutoItSetOption("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $PLOT[3] = [False, -1, -1]
[/autoit] [autoit][/autoit] [autoit]
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
EndFuncFunc POKE($address, $color, $screenwidth=320, $gdi32="gdi32.dll")
[/autoit] [autoit][/autoit] [autoit]
PLOT(Mod($address, $screenwidth), ($address / $screenwidth), $color, $gdi32)
EndFuncGlobal $PALETTE[256]
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc SIGN($x)
[/autoit] [autoit][/autoit] [autoit]
Return ( ($x > 0) - ($x < 0) )
EndFunc ; by MarsFunc GetDC($hWnd, $user32="user32.dll")
[/autoit] [autoit][/autoit] [autoit]
$DC = DllCall($user32, "int", "GetDC", "hwnd", $hWnd)
If @error Then Return SetError(@error, 0, -1)
Return $DC[0]
EndFuncFunc SetPixel($hdc, $X, $Y, $Color, $gdi32="gdi32.dll")
[/autoit]
DllCall($gdi32, "long", "SetPixel", "long", $hdc, "long", $X, "long", $Y, "long", $Color)
EndFuncDa 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
[autoit]
In AutoIt sieht das dann so aus:#NoTrayIcon
[/autoit][autoit][/autoit][autoit]
#include "BASIC.au3"Local $num, $a, $v, $c, $x, $y, $xx, $yy
[/autoit][autoit][/autoit][autoit]$num = InputBox("", "num", 50000)
[/autoit][autoit][/autoit][autoit]
$a = InputBox("", "a", 94)
$b = InputBox("", "b", 58)
$c = InputBox("", "c", -99)
$x = 0
$y = 0For $i = 1 To $num
[/autoit]
$xx = $y - SIGN($x) * Sqrt(Abs($b*$x - $c))
$yy = $a - $x
$x = $xx
$y = $yy
PLOT($x, $y, 0xFF*$i)
Next
IDLE()
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.
-
Wow, das ist wirklich gut geworden.
MfG, James
PS: 94 | 58 | -99 sieht auch gut aus, erinnert mich irgendwie an Neuronen.^^